Ответ 1
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectIdenticalTo: removedViewController];
navigationController.viewControllers = allViewControllers;
У меня есть uinavigationcontroller. После входа в систему я хочу удалить контроллеры просмотра, такие как RegisterViewController, LoginViewController и т.д. Из стека UInavigationcontroller.
Я имею в виду, что мне нужно удалить определенный контроллер представления из стека? Как это возможно.
Я проверил это сообщение
http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontrollers-root-view-controller/
Итак, мы можем взять его в массив вроде
NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];
Но как сделать дальнейший процесс. Этот вопрос охотится на меня надолго. Пожалуйста, ответьте мне. Спасибо заранее.
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectIdenticalTo: removedViewController];
navigationController.viewControllers = allViewControllers;
Вот мое решение. Вы можете установить тег или фиксированное свойство для своих контроллеров view, тогда вы можете пройти через стеки 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;