Как установить свойства корневого контроллера представления перед его представлением?

У меня есть определенный UINavigationController в storyboard Я представляю модально из другого контроллера представления:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *myNavController = [storyboard instantiateViewControllerWithIdentifier:@"myNavController"];
[self presentViewController:myNavController animated:YES completion:nil];

Этот навигационный контроллер установил другой UIViewController в качестве корневого контроллера в storyboard, Я хотел бы установить некоторые свойства для этого корневого контроллера представления, прежде чем он будет показан, но я попробовал это:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *myNavController = [storyboard instantiateViewControllerWithIdentifier:@"myNavController"];
[self presentViewController:myNavController animated:YES completion:nil];
 MyRootViewController *myRootViewController = [storyboard instantiateViewControllerWithIdentifier:@"myRootViewController"];
[myRootViewController setSelectedItem:selectedItem];
[myRootViewController setDelegate:self];

Но контроллер корневого представления еще не загружен, когда я пытаюсь установить его свойства...

Как я мог это сделать? Спасибо

1 ответ

Решение

Если вы отладили, вы найдете myRootViewController сделано в MyRootViewController *myRootViewController = [storyboard instantiateViewControllerWithIdentifier:@"myRootViewController"]; это не myNavControllerнастоящий rootViewController.

Этот метод -instantiateViewControllerWithIdentifier: просто дать вам совершенно новый экземпляр UIViewController.

Итак, если вы хотите получить настоящий rootViewController, просто замените его следующим:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *myNavController = [storyboard instantiateViewControllerWithIdentifier:@"myNavController"];

 MyRootViewController *myRootViewController = myNavController.viewControllers[0];
[myRootViewController setSelectedItem:selectedItem];
[myRootViewController setDelegate:self];

[self presentViewController:myNavController animated:YES completion:nil];
Другие вопросы по тегам