Как получить доступ к свойствам одного UIViewControllers из другого UIViewController? - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть один MainViewController, который, конечно, имеет один основной UIView. У меня есть этот основной вид, состоящий из множества разных подпредставлений.

Некоторые из этих подпредставлений имеют свой собственный ViewController.

Допустим, у представления MAIN (делегатом которого в основном является MainViewController) есть контейнер, который загружает другой UIView, который использует отдельный UIViewController- SecondaryViewController в качестве делегата для большинства своих действий.

Это представление контейнера, конечно, загружается в MainViewController через

MyContainerViewController *myContainerController = 
         [[MyContainerViewController alloc] ...]; 
[self addSubView: myContainerController.view];

контроллер для myContainerController.view хотя MyContainerViewController . Как внутри этого контроллера я могу получить доступ к свойствам MainViewController? В частности, мне нужно получить доступ к свойству MainViewController - self.navigationController, чтобы отправить новый ViewController? :)

Имеет ли это какой-то смысл? Я предполагаю, что будет происходить какое-то приведение типов, поскольку кажется, что мне нужно как-то сохранить ссылку на MainViewController внутри SecondaryViewController?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Нет смысла выдвигать новый ViewController из SecondaryViewController в MainViewController.Это портит дизайн кода.Дочерний объект получит доступ к своему методу parent, чтобы вызвать метод.Другими словами: плохой код.Сделайте вызов делегата из SecondaryViewController в MainViewController, чтобы его состояние изменилось.Тогда MainViewController может решить сделать с вызовом, и SecondaryViewController не будет ничего знать о реализации MainViewController.

Итак: Создайте протокол в SecondaryViewController.Пусть MainViewController будет делегатом SecondaryViewController.Реализуйте метод делегата в MainViewController, который выдвигает новый ViewController.

0 голосов
/ 16 февраля 2011

Предоставьте нужные контроллеры вспомогательного представления в качестве свойств контроллера представления, который их содержит.

Предоставьте доступ к корневому контроллеру (ам) представления в качестве свойств делегата приложения и также синтезируйте их.

Если вы хотите получить доступ к другому UIViewController, сначала получите ссылку на ваш appDelegate:

MyAppDelegate* myAppDelegate = [[UIApplication sharedApplication] delegate];

Затем просто используйте цепочку свойств, чтобы получить доступ к желаемому контроллеру представления.

SubSubViewController* ssvc = myAppDelegate.rootViewController.subViewController.subSubViewController;

Некоторые люди недовольны использованием метода класса sharedApplication для получения ссылки на делегата, но я использовал его в нескольких приложениях и не пострадал (пока).Альтернативой является передача вашего appDelegate через вашу иерархию viewControllers.

...