В моем приложении iOS я пытаюсь представить новый ViewController «выше» текущего. После this Apple, директив, в каком-то случае я использую следующий код:iOS - представление ViewController с presentViewController: не работает
MyViewController* vc = [[MyViewController alloc] initWithNibName: nil bundle: nil];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController: vc];
[mainController presentViewController:nc animated:YES completion:nil];
Этот код называется (и это происходит после успешной загрузки основного контроллера, а не в viewDidLoad) и новый вид появляется, используя выбранный стиль перехода.
Создан класс MyViewController, и его методы, такие как viewDidLoad и supportedInterfaceOrientations, успешно вызываются.
Теперь проблема здесь.
В построителе интерфейса создаю контроллер, установив его класс в MyViewController. Я создаю несколько представлений внутри этого контроллера, например, UIButton. MyViewController обладает свойством
IBOutlet UIButton* button
На раскадровке, ссылки на выход из помещенного UIButton устанавливается в свойство контроллера «Кнопка». В качестве двойной проверки в разделе «Outlets» контроллера вида на кнопке раскадровки привязывается к размещенному объекту UIButton.
Но когда вызывается viewDidLoad
, значение свойства кнопки равно нулю. Естественно, кнопка не отображается. То же самое касается два UITableView
объектов (они DataSource и делегат оба настроены на один контроллер представления и MyViewController соответствует
<UITableViewDelegate, UITableViewDataSource>
в случае, если это важно).
Кроме того, черный экран, который появляется, игнорирует все касания (и распознающий признак жестов помещается на контроллер на раскадровке). Но он реагирует на изменения ориентации.
Я полагаю, проблема в том, что созданный экземпляр MyViewController не смог «увидеть» раскадровку, и я пропустил что-то очень основное, но я не вижу никаких намеков в документации Apple.
Просто выполните '[[MyViewController alloc] init]', и он должен автоматически выбрать правильный ниб/комплект. –
@MikeWeller Нет, это не так. init фактически приводит к вызову initWithNibName: Bundle: с обоими аргументами nil. – Abstraction
Я просто говорю, что это проще и чище (ИМХО). –