Как создать экземпляр navigationController при передаче данных в viewController? - PullRequest
1 голос
/ 27 января 2020

Итак, у меня есть tabBar. Нажатие на определенную вкладку приведет пользователя к viewController, который встроен в navigationController. Чтобы включить navigationController, я создаю экземпляр viewController, используя

myViewController = [storyboard instantiateInitialViewController];

вместо

myViewController = [storyboard instantiateViewControllerWithIdentifier:@"myID"];

. Более поздний код выдвигает viewController, но без navigationController

Это нормально до момента, когда я хочу передать данные в экземпляр myViewController. Дело в том, что я не могу передать данные с экземпляром, ссылающимся на начальный viewController (который является navigationController), но я могу сделать это, используя экземпляр, ссылающийся непосредственно на myViewController. Другими словами:

Это работает для получения данных (но не navigationController):

viewController = [storyboard instantiateViewControllerWithIdentifier:@"experienceID"];
((ExperiencesListViewController*)viewController).experiences = self.experiences;

, и происходит сбой, если я пытаюсь добавить данные, но дает мне navigationBar если я исключу данные настроек:

viewController = [storyboard instantiateInitialViewController];
((ExperiencesListViewController*)viewController).experiences = self.experiences;

Надеюсь, я объясню это достаточно хорошо. Дайте мне знать, если есть что-то, что мне нужно уточнить.

РЕДАКТИРОВАТЬ Моей первой мыслью было использование prepareSegue, но это не срабатывает при перемещении между tabs. Другая мысль заключается в том, чтобы каким-то образом получить доступ к myViewController через экземпляр, но не уверен, как.

1 Ответ

1 голос
/ 27 января 2020

Это потому, что начальная UIViewController этой конкретной раскадровки представляет собой UINavigationController.

Простой способ получить желаемый V C - получить UINavigationController, вызвав:

navController = [storyboard instantiateInitialViewController];

так же, как вы сделали, а затем:

navController.childViewControllers[0]

Это вернет первый V C этого конкретного контроллера навигации (при условии, конечно, что он содержит только V C, в который он встроен), который, вероятно, является вашим ExperiencesListViewController

...