获取视图控制器的父级推送到具有多个UINavigationControllers的UITabBarController中的UINavigationController堆栈

时间:2011-09-19 13:59:00

标签: iphone objective-c ios foundation

所以这是一个问题,我真的遇到了麻烦。我正在使用此代码来检索推送到UINavigationController堆栈的UIViewController的父控制器:

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 个答案:

答案 0 :(得分:2)

不确定这是否是您要找的,但我认为它是[nav viewControllers]数组中最顶级的ViewController。

答案 1 :(得分:2)

即使您能够使用此方法实现此目的,这也与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,

阿克沙伊