如何获得UIView中的父导航控制器

问题描述:

我在我的应用程序委托中创建了一个UITabBarController。 其中每个标签栏项目拥有一个不同的UINavigationController,它使用NIB(使用-pushViewController:)加载自定义UIViewController。 在其中一个导航控制器中,我也加载了一个自定义的UIView类。 该视图在UIViewController内部多次加载。如何获得UIView中的父导航控制器

自定义UIView有一个UIButton,在接触它时,我想在堆栈上推新的UIViewController。 问题是我'丢失'UINavigationController持有UIViewController。 我知道我应该使用代表,但还没有弄清楚谁应该成为代表。

提前致谢!

+0

委托人会更好。代表应该在您的视图类中定义,并应由您的所有者实施。其次,owner属性应该在UIView中,而不在UIViewController中。 – 2012-12-26 12:35:14

无论.navigationController或.tabBarController将可用于一个已经创建,但入栈

无论是在你的视图中创建一个属性(或视图控制器)类,它是提供了一个UIViewController一个UIView或UIViewController中可选的初始化后,或者你可以然后在主人的ViewController添加第三个参数initWithNibName:bundle:

@interface CustomViewController : UIViewController 
{ 
    UIViewController *owner; 
} 

@property (nonatomic, assign) UIViewController* owner; 

@end 

CustomViewController *cvc = [[CustomViewController alloc] initWithNibNamed:nil bundle:nil]; 
cvc.owner = self; 

这太糟糕了.parentViewController是只读的,这将是明智的地方。

+0

感谢您的回复。 这就是我所做的,我已经设置了一个属性,在分配和初始化之后,我将所有者设置为“自我”。 但是,在例如使用getter [self owner]时, viewDidLoad我得到(null)。 如果我在所有者ViewController中做:[cvc所有者]我不会(null)。 – omeraloni 2011-05-15 13:50:38

+0

您是否在将其添加到父级子视图之前分配所有者? – 2011-05-17 19:04:47

+0

是的。我也添加它后发布视图。 – omeraloni 2011-05-21 11:33:10

您可以使用UIApplication类获得此类。使用这个类,你可以找到哪个viewController首先被放置。以下是针对您的问题的解决方案link