UIсториборд popViewController

Я использую UISegue в своем приложении для автоматического перехода между контроллерами представления в моем приложении. Я назову их А и Б.

Это сработало, как и ожидалось, однако, когда я хотел вернуться к A из B, я попытался вызвать [self.navigationController popViewController], однако свойство B navigationController сообщает null.


Во второй попытке я попытался сопоставить кнопку с UISegue обратно для контроллера представления A.
Однако это просто создает новый ViewController.

В качестве обходного пути я закончил тем, что обходной путь заключался в том, чтобы получить B viewcontroller из UIStoryboard и вызвать [A.navigationController pushViewController:B]

В этот момент вызов [B.navigationController popViewController] сработал, как и ожидалось.

Это кажется неправильным, из перехода раскадровки, как я могу вернуться к предыдущему контроллеру представления?


person Onedayitwillmake    schedule 16.01.2012    source источник


Ответы (1)


Я не знаю о классе ваших контроллеров A и B (будь то UIViewController, UITableViewController или UINavigationController), но если вы будете следовать следующему шаблону, он должен работать.

  • В пустой раскадровке вставьте UINavigationController. Это приведет к появлению двух окон на раскадровке, связанных стрелкой (переход). Тот, что справа, должен быть контроллером А.

  • Скажем, в A вы добавляете кнопку. Кнопка втолкнет B в стек навигации.

  • Затем вы добавляете второй контроллер B и перетаскиваете его с кнопки в контроллере A на контроллер B и выбираете «push» во всплывающем меню.

Если вы используете только UIViewController (A) и нажимаете B, нет navigationController, который позаботится о всплывающих окнах.

Надеюсь, что поможет.

person Canopus    schedule 18.01.2012
comment
Нет необходимости перетаскивать UINavigationController и возиться с его настройкой, если у вас уже есть UIViewController. Вместо этого выберите UIViewController и перейдите в меню «Редактор», выберите «Встроить в» и выберите UINavigationViewController, и это все настроит для вас. - person Scott Sherwood; 07.02.2012
comment
@ Скотт Шервуд. Это хороший трюк. Я этого не знал. Но один вопрос. Когда я делаю это в раскадровке, Xcode автоматически превращает мой viewController в navController и viewController, связанный с переходом. Так разве это не одно и то же? - person Canopus; 07.02.2012
comment
Да, это точно так же, просто немного короче. Связь между navController и viewController называется отношением и немного отличается от Segue, но в принципе то, что у вас осталось, такое же, как вы предложили. - person Scott Sherwood; 07.02.2012