Как удалить определенный контроллер представления из стека uinavigationcontroller? - PullRequest
30 голосов
/ 20 января 2010

У меня есть навигационный контроллер. После входа в систему я хочу удалить контроллеры вида, такие как RegisterViewController, LoginViewController и т. Д. Из стека UInavigationcontroller

Я имею в виду, я должен удалить определенный контроллер представления из стека? Как это возможно.

Я проверил этот пост

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

Так что мы можем взять его в массив, как

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

Но как сделать дальнейший процесс .. Этот вопрос долго преследует меня .. Пожалуйста, ответьте мне .. Спасибо заранее

Ответы [ 2 ]

84 голосов
/ 20 января 2010
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectIdenticalTo: removedViewController];
navigationController.viewControllers = allViewControllers;
1 голос
/ 23 января 2015

Вот мое решение.Вы можете установить тег или фиксированное свойство для ваших viewcontrollers, затем вы можете пройти через стек uinavigationcontroller, чтобы найти целевой viewcontroller (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;
...