Получение родительского элемента контроллера представления, помещаемого в стек UINavigationController в UITabBarController с несколькими UINavigationControllers - PullRequest
0 голосов
/ 19 сентября 2011

Итак, вот проблема, с которой у меня действительно проблемы.Я использую этот код для извлечения родительского контроллера UIViewController, который помещается в стек UINavigationController:

MyAppDelegate *delegate = [[UIApplicationDelegate sharedApplication] delegate];
UINavigationController *nav = delegate.navigationController;
MyParentViewController *parent = (MyParentViewController *)nav.topViewController;
parent.myProperty = @"propertyValue";

Однако, похоже, это работает только при работе с приложением с одним контроллером навигации.Моя структура:

->UITabBarController
-->UINavigationController
--->MyYetAnotherParentViewController
-->UINavigationController
--->MyOtherParentViewController
-->UINavigationController
--->MyParentViewController

, что означает, что у меня есть 3 контроллера навигации внутри контроллера панели вкладок.

В настоящее время я нахожусь в третьем контроллере навигации и выдвинул контроллер представления выше MyParentViewController.

Я пытаюсь передать данные из UIViewController, который я перенес в MyParentViewController, используя свойства.Как я могу получить родительский элемент UIViewController, который я поместил в стек, если у меня есть эта настройка?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Даже если вы можете достичь этого с помощью этого метода, это не очень хорошо согласуется с шаблоном проектирования MVC.В идеале ваш дочерний VC должен вызывать метод вашего модельного класса (который может быть одноэлементным), а модельный класс должен уведомлять ваш родительский VC.Вы можете сделать что-то вроде -

//In your child VC 
[[MyModelClass sharedInstance] buttonClickedInChildVC:@"propertyValue"];

//In your Model class
[[NSNotificationCenter defaultCenter] postNotificationName:@"buttonClickedInChildVC" object:@"propertyValue"];

//In your Parent VC
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(buttonClickedInChildVC:) 
                                                 name:@"buttonClickedInChildVC"
                                               object:nil];

-(void)buttonClickedInChildVC:(NSNotification *) notification
{
    //do something
}

HTH,

Акшай

2 голосов
/ 19 сентября 2011

Не уверен, что это то, что вы ищете, но я думаю, что это самый верхний ViewController в массиве [nav viewControllers].

...