Xcode - визуальная идентификация пользовательских представлений в построителе интерфейса/раскадровке

Если вы создаете пользовательский UIView и интегрируете его внутри родительского контроллера представления/представления в построителе интерфейсов, графический элемент, представляющий ваше пользовательское представление, невидим, если вы не укажете цвет фона (я этого не делаю).

Есть ли способ, только во время разработки, идентифицировать разные пользовательские представления? Любые хаки/трюки, чтобы отличить их?

Ближайшим образом я могу установить цвет фона в IB, а затем удалить фон в реализации пользовательского представления.

Ответ 1

Границы Прямоугольники

Вы можете найти прямоугольники границ полезными. Вы можете включить их, перейдя в панель меню и выбрав "Редактор" > "Холст" > "Показать прямоугольники".

Вот пример. У меня есть вид (a UICollectionViewCell подкласс), выложенный в банке. Он имеет однострочный ярлык, двухстрочную метку и пользовательский подзаголовок. Пользовательский subview сам содержит меньший пользовательский subview. Здесь нить с границами прямоугольников выключена:

без границ прямоугольников

Здесь тот же самый нить с прямоугольниками границ:

с прямоугольниками границ

Переопределение цвета фона

Вот еще один метод, основанный на идее установки цвета фона. Этот метод требует, чтобы цель развертывания была iOS 5.0 или новее.

Как вы описали, установите цвет фона, чтобы сделать вид видимым в nib:

цвет фона

Затем переключитесь на Инспектор Идентификации и добавьте backgroundColor в раздел Атрибуты Определенной пользователем времени выполнения. Установите его на цвет фона, который вы хотите видеть во время выполнения. Например, если вы хотите, чтобы он был белым во время выполнения:

backgroundColor в пользовательских атрибутах времени выполнения

Если вы хотите, чтобы цвет фона был ясным, вы можете установить backgroundColor на цвет с непрозрачностью 0 или вы можете установить его на "Nil" вместо любого цвета:

backgroundColor установлен на Nil

Ответ 2

Этот подход установки цвета фона в Interface Builder, но сброс его в коде - это простой, но эффективный метод. Два уточнения:

  • Если у вас несколько пользовательских представлений на одной сцене сценария, вы можете избавиться от необходимости программно очищать цвет фона для каждого из них индивидуально, используя IBOutletCollection. Таким образом, в Interface Builder дайте им все цвета фона, а затем добавьте все ваши пользовательские представления для данной сцены в коллекцию. Затем вы можете установить цвет фона для всех из них в одном выражении. Так, например, если у вас есть дюжина элементов управления на одной сцене, все в одном IBOutletCollection имеют имя viewsCollection:

    @property (strong, nonatomic) IBOutletCollection(UIView) NSArray *viewsCollection;
    

    вы можете очистить цвет фона всех из них в одном выражении:

    [self.viewsCollection setValue:[UIColor clearColor] forKey:@"backgroundColor"];
    
  • Вы также можете упростить идентификацию своих пользовательских представлений в Interface Builder, установив "Label" в свойствах "Document" в "Identity inspector":

    label

    Как только вы это сделаете, когда вы посмотрите на схему документа в левой части главной панели, вы увидите, что ваши ярлыки отображаются:

    document outline

    Затем, используя схему документа, упрощается идентификация ваших индивидуальных представлений в сцене. Вы можете использовать случайную метку, как я здесь, или вы можете использовать имя своего пользовательского класса просмотра или что-то еще.