从子控制器函数调用pushViewController

时间:2011-09-20 02:54:25

标签: iphone objective-c xcode protocols

我有一个子视图控制器,它是UINavigationController的子类。它使用UIButton加载到子视图中。当按下该按钮时,我想从子视图的相应视图控制器(例如ChildViewController)调用父控制器中的UINavigationController的{​​{1}}方法。

如果不直接引用父视图控制器,这怎么可能?是否可以使用标准协议方法实现,还是必须自己创建?

2 个答案:

答案 0 :(得分:3)

每个UIViewController都有一个名为navigationController的属性。如果UIViewController是UINavigationController堆栈的一部分,您可以通过以下方式使用navigationController属性:

[self.navigationController pushViewController:yourNextViewController animated:YES];

只需要在堆栈上推送新的ViewController就不需要访问rootViewController。如果你有大的导航堆栈,这可能会非常糟糕。

顺便说一句 - Apple states UINavigationController不用于子类化。通常,听取他们的警告和指示是个好主意,所以你可能想再次重新审视子类化方法。 使用加载到UINavigationController堆栈的子类UIViewController可能是一种更好的方法。

希望这有帮助。

答案 1 :(得分:0)

包含您的孩子UIViewControllerUIView的孩子UIButton应该拥有parentViewController属性。您可以使用它来获取对UINavigationController的弱引用,您可以在其中发送pushViewController:animated: