Подтвердить что ты не робот

Пользовательский UIView, добавленный в построитель интерфейсов, не загружает xib

Я создал пользовательский UIView с xib.

Кроме того, у меня есть UIViewController в моей раскадровке, к которой я добавил UIView, и установите его класс как пользовательский UIView.

Но когда я запускаю приложение, представление не имеет своих подзонов. Когда я отлаживаю, все subviews являются нулевыми.

В .m пользовательского UIView эти методы init присутствуют:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {

    }
    return self;
}

Что мне не хватает?

4b9b3361

Ответ 1

Как вы уже знаете, с UIViewController у нас есть метод -initWithNibName:bundle: для его соединения с xib.
Но...
Когда дело доходит до UIView, вам нужно использовать -loadNibNamed:owner:options: и загрузить его с помощью xib. (просто указание пользовательского класса на представление в xib не будет работать)


Пусть:

  • Создал подкласс UIView под названием CustomXIBView
    • (Новый файл > Cocoa Touch > Objective-C Класс - подкласс UIView)
  • Создал простой пользовательский интерфейс и назвал его CustomXIBView
    • (Новый файл > Пользовательский интерфейs > Вид)

Шаги:

  • Перейдите к CustomXIBView nib
  • Выберите View (левая панель инструментов)
  • Выберите Show Identity Inspector (третий вариант на панели справа)
  • Укажите CustomXIBView как Пользовательский класс View
    • ничего не делать с CustomXIBView File Owner в nib
  • Перетащите объекты Drop и подключите их с помощью CustomXIBView.h

код:

//To load `CustomXIBView` from any `UIViewController` or other class: 
//instead of the following commented code, do the uncommented code
//CustomXIBView *myCustomXIBViewObj = [CustomXIBView alloc] init];
//[myCustomXIBViewObj setFrame:CGRectMake(0,0,320,480)];

//Do this:
CustomXIBView *myCustomXIBViewObj = 
     [[[NSBundle mainBundle] loadNibNamed:@"someView"
                                    owner:self
                                  options:nil]
                            objectAtIndex:0];
[myCustomXIBViewObj setFrame:CGRect(0, 
                                    0, 
                                    myCustomXIBViewObj.frame.size.width, 
                                    myCustomXIBViewObj.frame.size.height)];
[self.view addSubview:myCustomXIBViewObj];

ref: http://eppz.eu/blog/uiview-from-xib/