如何在UIView中获取父导航控制器

时间:2011-05-09 09:49:08

标签: iphone objective-c xcode ios ios4

我在我的app委托中创建了UITabBarController。 其中每个标签栏项目包含一个不同的UINavigationController,用于加载带有NIB的自定义UIViewController(使用-pushViewController:)。 在其中一个导航控制器中,我还加载了一个带有自定义NIB的自定义UIView类。 此视图在UIViewController内多次加载。

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

提前致谢!

2 个答案:

答案 0 :(得分:3)

.navigationController或.tabBarController都不能用于已创建但未被压入堆栈的UIView或UIViewController

在View(或ViewController)类上创建一个属性,该属性是初始化后可选提供的UIViewController,或者您可以向initWithNibName:bundle:添加第三个参数

@interface CustomViewController : UIViewController
{ 
    UIViewController *owner;
}

@property (nonatomic, assign) UIViewController* owner;

@end

然后在所有者ViewController中:

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

太糟糕了.parentViewController是只读的,这将是一个合理的地方。

答案 1 :(得分:0)

您可以使用UIApplication课程来完成此操作。使用此课程,您可以找到最先放置的viewController。以下是您的问题的解决方案link