0

View ControllerがNavigationスタックにあるかどうかを確認しようとしていますが、何をすべきかを選択できません。これが私がやろうとしていることです:

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

SGAddNewServerViewController問題は、アドレスobjectAtIndex...などを知る必要があるので、どうすれば参照を取得できるかということです。XCodeは、それが何であるかわからないというエラーを私に与え、彼は正しいです。

withoutNavigationStackの正確なアドレスを知って、どのように参照を取得できるかについてのアイデアはありますか?ありがとう。

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

クラスに基づいてViewControllerを見つけようとしているようです。これを行うには、これを試してください:

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
    }
}

非常に多くのメソッド/プロパティ呼び出しを1行にネストすることはお勧めできません。読み取りとデバッグが非常に困難になります。

于 2013-01-24T16:13:28.160 に答える