Какова цель использования UIViewController IBOutlet - PullRequest
0 голосов
/ 29 мая 2011

Я нахожусь в стадии обучения программированию на iOS. Я пытаюсь добавить NIB (называемый B) в другой NIB (называемый A). Для этого я добавил View Controller в A, который использует B NIB (используя NIB Name). Кроме того, в ViewController A я создал IBOutlet для хранения ViewController B. Наконец, в A я подключил IBOutlet к ViewController, ссылаясь на B.

Теперь я ожидаю, что при запуске проекта я увижу, что B загружается всякий раз, когда загружается A, но это не так. Чтобы достичь этого, я должен инициализировать B прагматически, используя initWithNibName в методе viewDidLoad A, и установить его в IBOutlet. Но эта часть не зависит от использования IBOutlet в A и добавления ViewController в A, который ссылается на B. Другими словами, если бы я просто инициализировал B в viewDidLoad A без создания IBOutlet в A и без создания View Объект контроллера в A, который бы работал так же хорошо.

Итак, мой вопрос: какова цель использования IBOutlet для добавления пользовательских NIB View Controller?

Ответы [ 2 ]

0 голосов
/ 26 июля 2013

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

Вы можете использовать uiviewcontroller's presentViewController:animated:completion: метод для загрузки bViewController's view hierarchy, и все методы, такие как viewDidAppear, viewDidLoad, viewWillAppear, будут вызываться автоматически, вам не нужно вызывать их вручную.

Вы найдете эту статью злоупотребляющей UIViewControllers полезной.

0 голосов
/ 30 мая 2011

Если у вас есть выход на VC B в VC A, это не означает, что представление VC B будет загружено автоматически. Если вы проверите розетку VC B в VC A viewDidLoad, вы увидите, что есть адрес для VC B, поэтому NIB загружен. Чтобы загрузить его представление, вы должны получить доступ к VCB.view и вызвать соответствующие методы в VCB, например:

[self.bViewController setFrame:[self frame]];
    [self.bViewController viewDidLoad];
[self.bViewController viewWillAppear:NO];
[self.view addSubview:self.bViewController.view];
[self.bViewController viewDidAppear:NO];
...