2016-12-21 3 views
4

Текущие настройкиПоказ содержимого UIView загруженного из XIb в раскадровке

У меня есть подкласс UIView который загружает содержимое из файла XIb - назвать это XibOwnerClass. Кроме того, среди других классов есть класс, называемый Triangle, который помогает мне создавать треугольники с рамкой или без нее с разными цветами штриха или заливки и т. Д. Этот класс можно разделить на раскадровку, а некоторые его свойства определены как IBInspectable.

В настоящее время в моем файле xib я использую этот вид треугольника и настраиваю его проверяемые свойства через IB. И это действительно здорово и удобно ... Поэтому, если я посмотрю на xib, я действительно увижу треугольный вид среди других видов.

Итак, давайте идем дальше. Чтобы использовать этот XibOwnerClass, я перетаскиваю элемент UIView в раскадровку и меняю свой пользовательский класс на XibOwnerClass, поэтому я получаю свои свойства, которые можно задавать для XibOwnerClass. Итак, я могу настроить все в IB, и когда я запускаю приложение, все работает.

Проблема

Даже если это работает, мне интересно, если есть способ, чтобы иметь несколько представлений (класс XibOwnerClass) затянулась на раскадровке, и быть в состоянии настроить все из них в отдельности корыта Интерфейс Builder?

В настоящее время, когда я перетаскиваю UIView и меняю свой пользовательский класс на XibOwnerClass Я ничего не вижу. Я имею в виду, что вид есть, и он имеет свои стандартные свойства + проверяемые свойства. Но я не вижу треугольников, определенных в xib в этом новом представлении. Есть ли способ сделать это?

Я знаю, что xib повторно используется в моем случае (и он должен использоваться таким образом), поэтому, если я что-то изменил в xib, все изображения, загруженные из него, будут затронуты. Но есть ли способ множественного просмотра загрузить с того же xib, но когда загружен, чтобы увидеть их & настроить их индивидуально?

Вот как я загружаю из xib:

-(instancetype)initWithCoder:(NSCoder *)aDecoder{ 

    if ((self = [super initWithCoder:aDecoder])){ 

     UIView *myView = [[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil] firstObject]; 

     if (myView){ 

      myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, self.frame.size.width, self.frame.size.height); 
      [self addSubview:myView]; 

      //Initialize other stuff 

      [self commonInit]; 
     } 
    } 

    return self; 
} 

Тогда в awakeFromNib: я использую значение осматриваемых свойств ...

EDIT:

Также я не initWithFrame: реализованы , но я думал, что это не нужно, если загрузка из nib (потому что она не выполняется). Но, возможно, это необходимо во время разработки?

ответ

0

Хорошо, я решил. Оказалось, что я не должен использовать Main Bundle, а скорее связывать для этого класса, как описано here.

Так вот код:

NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 

@ ответ Mohammadalijf в целом является правильно. Это просто не является прямым решением для моей проблемы. Но позже, когда я установил связку, я использовал prepareForInterfaceBuilder, как он сказал, и инициализировал все, чтобы все было доступно во время разработки.

Некоторые полезные вещи, связанные со всем этим, можно найти here.

2

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

override func prepareForInterfaceBuilder() { 
     //prepare setups or things to show in storyboard 

} 
+0

Я обновлю свой вопрос с помощью некоторого кода. Кроме того, этот метод никогда не выполняется в моем случае (я поставил точку останова). И обратите внимание, что я вижу проверяемые свойства в IB для моего XibOwnerClass. Я просто не вижу никакого контента от фактического xib. – Whirlwind

+0

А, этот метод называется только во время разработки, а не во время сборки. В любом случае, я не вижу различий. В настоящее время я ничего не вижу. Это похоже на то, что я добавил обычный просмотр + проверяемые свойства (в Attributes Inspector). Контент не отображается. – Whirlwind

+0

Теперь это сработало, я тоже ответил. Спасибо за ваш ответ. Вы получили мой взнос, потому что это, конечно, недостающая часть для решения моей проблемы. – Whirlwind

Смежные вопросы