0

我正在尝试查看视图控制器是否在导航堆栈上,并且我迷失了要做什么。这是我正在尝试做的事情:

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

SGAddNewServerViewController问题是,由于我需要知道它的地址,我如何获得参考objectAtIndex...?XCode 给了我一个不知道它是什么的错误,他是对的。

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

4

2 回答 2

1

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

NSArray *viewControllers = ((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers;
for (UIViewController *controller in viewControllers) {
    if ([controller isKindOfClass:[SGAddNewServerViewController class]]) {
        //todo something
    }
}
于 2013-01-24T16:13:20.813 回答
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
    }
}

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

于 2013-01-24T16:13:28.160 回答