检查NavigationStack是否包含View Controller错误

时间:2013-01-24 16:05:29

标签: iphone ios objective-c cocoa-touch uinavigationcontroller

我正在尝试查看视图控制器是否在导航堆栈上,并且我在选项中丢失了。这就是我想要做的事情:

if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers containsObject:SGAddNewServerViewController]) {
    <#statements#>
}

问题是,我如何获得对SGAddNewServerViewController的引用,因为我需要知道objectAtIndex...等地址? XCode给我一个错误,就是不知道它是什么,他是对的。

我是如何知道它在NavigationStack上的确切地址的任何想法without?感谢。

2 个答案:

答案 0 :(得分:1)

您可以迭代所有控制器并检查是否存在SGAddNewServerViewController类型的控制器

NSArray *viewControllers = ((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers;
for (UIViewController *controller in viewControllers) {
    if ([controller isKindOfClass:[SGAddNewServerViewController class]]) {
        //todo something
    }
}

答案 1 :(得分:1)

您似乎正在尝试根据其类找到视图控制器。要做到这一点,试试这个:

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
UINavigationController *nav = delegate.frontViewController.navigationController;
for (UIViewController *controller in nav.viewControllers) {
    if ([controller isKindOfClass:[SGAddNewServerViewController class]]) {
        SGAddNewServerViewController *sgController = (SGAddNewServerViewController *)controller;
        // do stuff
    }
}

请注意,将这么多方法/属性调用嵌套到一行中并不是一个好主意。它使阅读和调试变得非常困难。