web-dev-qa-db-ja.com

uinavigationcontrollerスタックから特定のビューコントローラーを削除する方法

Uinavigationcontrollerがあります。ログインした後、UInavigationcontrollerスタックからRegisterViewController、LoginViewControllerなどのビューコントローラを削除します。

特定のView Controllerをスタックから削除する必要があるということですか?その可能性。 ?

私はこの投稿をチェックしました

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

だから私たちはそれを次のような配列に入れることができます

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];

しかし、さらなるプロセスを行う方法..この質問は私を長い間私を狩っています。私に答えてください..事前に感謝します

30
S.P.
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectIdenticalTo: removedViewController];
navigationController.viewControllers = allViewControllers;
85
Costique

これが私の解決策です。タグまたは固定プロパティをビューコントローラーに設定すると、uinavigationcontrollerスタックをトラバースして、ターゲットのビューコントローラー(vcToRemove)を検索して削除できます。これはより安全かもしれません。コード:

NSInteger tag = vcToRemove.wvTag;
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers];
        int i = 1;
        for (i = 1; i <=[allViewControllers count]; i++) {
            UIViewController *vc = [allViewControllers objectAtIndex:i];
            if ([vc isKindOfClass:[MyWebViewController class]]) {
                if (((MyWebViewController *)vc).wvTag == tag) {
                    [allViewControllers removeObjectAtIndex:i];
                    break;
                }
            }
        }

        vcToRemove.navigationController.viewControllers = allViewControllers;
1
Jie Liu