Как установить свойства корневого контроллера представления перед его представлением?
У меня есть определенный 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];