Как я могу создать контроллер представления, который определен в XIB?

Извините, возможно, вопрос о нобе, ребята. Я новичок в разработке iOS.

Как я могу создать контроллер представления, определенный в XIB?

Когда вы создаете новый класс, унаследованный от UIViewController в Xcode, с помощью флажка "Новый файл" и отметьте with XIB, он создает файл xib, у которого нет элемента viewController. Но скорее это имеет placeholder, который указывает на UIViewController, который определяется в коде.

Но я вижу, что вы можете создать сам контроллер в Interface Builder и указать для него customClass.

К сожалению, это не работает для меня. Я получаю ошибку loaded the "EmbeddedViewController" nib but the view outlet was not set во время выполнения. Но я полагал, что свойство view должно быть задано загрузчиком ресурсов автоматически, поскольку все определяется с помощью XIB. Он работает таким образом для TableView и его ячеек, например.

Не могли бы вы привести пример, как это сделать?

Я создал образец проекта: https://github.com/cppexpert/SampleWithNib

Контроллер, о котором идет речь, EmbeddedViewController

Ответ 1

Оказалось, что эти элементы управления существуют в IB для проектов Storyboard.

Ответ 2

Создайте один Xib для UIViewController

Каждый Xib имеет объект File Owner для установки класса UIViewController. Щелкните File Owner и выберите EmbeddedViewController на нем class

Затем перетащите главный класс UIView, а не UIViewController, затем подключите это представление с владельцем файла в виде. UIViewController просто используется для перетаскивания в базовый проект StoryBoard.

https://github.com/lequysang/gitfiles02/blob/master/SampleWithNib-master.zip

Ответ 3

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

Ответ 4

Если вы создаете новое представление в xib.set владельца файла для своего пользовательского класса. Или если вы просто хотите создать представление. Тогда

NSArray* test1 = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
self.myViewFromNib = [test1 objectAtIndex:0];

Где myViewFromNib - ваш объект вида, а "Вид" - ваше имя низа.