Удаление viewcontrollers из стека навигации
У меня есть стек навигации, скажем, 5 UIViewControllers. Я хочу удалить 3-й и 4-й viewcontrollers в стеке по нажатию кнопки в 5-м viewcontroller. Возможно ли это сделать? Если да, то как?
8 ответов:
использовать этот код и наслаждайтесь:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; // [navigationArray removeAllObjects]; // This is just for remove all view controller from navigation stack. [navigationArray removeObjectAtIndex: 2]; // You can pass your index here self.navigationController.viewControllers = navigationArray; [navigationArray release];
надеюсь, что это поможет вам.
Edit: Swift Code
var navigationArray = self.navigationController?.viewControllers //To get all UIViewController stack as Array navigationArray!.remove(at: (navigationArray?.count)! - 2) // To remove previous UIViewController self.navigationController?.viewControllers = navigationArray!
вы можете сначала получить все контроллеры вида в массиве, а затем после проверки с соответствующим классом контроллера вида, вы можете удалить тот, который вы хотите.
вот небольшой фрагмент кода:
NSArray* tempVCA = [self.navigationController viewControllers]; for(UIViewController *tempVC in tempVCA) { if([tempVC isKindOfClass:[urViewControllerClass class]]) { [tempVC removeFromParentViewController]; } }
Я думаю, это сделает вашу работу легче.
Swift 3 & 4
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1
удалить все:
self.navigationController!.viewControllers.removeAll()
удалить по индексу
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
там куча более возможных действий, таких как removeFirst,range и т. д.
Swift 2.0:
var navArray:Array = (self.navigationController?.viewControllers)! navArray.removeAtIndex(navArray.count-2) self.navigationController?.viewControllers = navArray
Если вы пытаетесь перейти на 2-й контроллер вида из 5-го контроллера вида (пропуская 3-й и 4-й), вы хотели бы использовать
[self.navigationController popToviewController:secondViewController]
.вы можете получить
secondViewController
из стека навигационного контроллера.secondViewController = [self.navigationController.viewControllers objectAtIndex:yourViewControllerIndex];
использовать
if let navVCsCount = navigationController?.viewControllers.count { navigationController?.viewControllers.removeSubrange(Range(2..<navVCsCount - 1)) }
Он будет заботиться о ViewControllers navigationController. viewControllers, а также navigationItems сложены в navigationBar.
Примечание: обязательно назовите его хотя бы после viewDidAppear