找出我在uinavigationcontroller层次结构中的位置,或者是否已推送视图?

时间:2010-05-26 14:36:00

标签: iphone objective-c cocoa-touch uinavigationcontroller

我有一个视图,有时会显示为uinavigationcontroller的推送视图,有时候就像标签栏项目的初始视图一样。

界面上有一个“保存”按钮,我想让视图在被推到屏幕上时弹回到上一个视图,当它作为标签栏选择屏幕的一部分显示时什么都不做。

在伪代码中,我想我想要做的是:

if view-has-been-pushed, then pop back, else do nothing

如何判断视图是否被推送?

3 个答案:

答案 0 :(得分:5)

根据documentation

 NSArray* views = [myNavigationController viewControllers];
 if (self == [views objectAtIndex:0])
 {
    // I am the root view
 }

但正如jasarien所说,如果视图已经是根<{1}},那么popViewControllerAnimated什么都不做

答案 1 :(得分:1)

您可以从导航控制器获取视图控制器属性,并与阵列中的第一个控制器进行比较。如果比较返回true,则它是根视图控制器,否则它被推送。

但是,如果视图控制器是根视图控制器,则调用pop应该不执行任何操作,因此您不需要任何额外的逻辑。

答案 2 :(得分:1)

你的“如果已经推出了视图,然后回弹,则无所事事”逻辑可以通过以下方式轻松实现:

if (self.navigationController != nil) {
    // We are part of a navigation controller, so pop
}

如果您不在导航控制器中,您可能想要删除完成按钮?您可以在viewDidLoad中执行相同的检查,并在那里显示或隐藏完成按钮。