Как создать макет UIViewController в раскадровке, а затем использовать его в коде?

#iphone #ios5 #modalviewcontroller #uistoryboard

#iPhone #ios5 #modalviewcontroller #uistoryboard

Вопрос:

У меня есть раскадровка в моем приложении для iOS 5.

Там я создал несколько экранов, и это работает отлично.

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

Возможно ли это? Используя nibs, я сделал это следующим образом:

 ResultsController *rc = [[ResultsController alloc] initWithNibName:@"ResultsController"
                                                            bundle:nil];
[self.navigationController presentModalViewController:rc animated:YES];
[rc release];
  

Прямо сейчас у меня действительно нет файлов nib, так как же мне это сделать?

Ответ №1:

Взгляните на класс UIStoryboard. Существует метод instantiateViewControllerWithIdentifier. Итак, вам нужно установить Identfier в редакторе Storyboard для вашего ResultsController ViewController.

Вы можете сделать что-то вроде этого

 UIViewController *viewController = 
   [[UIStoryboard storyboardWithName:@"MainStoryboard" 
                              bundle:NULL] instantiateViewControllerWithIdentifier:@"ResultsController"];

[self presentModalViewController:viewController animated:NO];
  

Комментарии:

1. Спасибо! И … есть ли способ установить кнопку, которая отключала бы modalViewController непосредственно на раскадровке? Не привязывая его к методу в коде, который вызывает только этот метод dismiss …?

2. Я не думаю, что это работает без кода, потому что нет подключения к каким-либо другим ViewControllers в раскадровке.

Ответ №2:

В вашей раскадровке:

  1. Добавьте универсальный UIViewController.
  2. С помощью Identity Inspector установите его пользовательский класс в качестве вашего ResultsController.
  3. Создайте модальный переход от вашего исходного контроллера представления к ResultsController

Ответ №3:

Для Swift 4

 let viewController = UIStoryboard.init(name: "MainStoryboard", bundle: nil).instantiateViewController(withIdentifier: "ResultsController")
self.present(viewController, animated: true, completion: nil)