Как быстро настроить контроллер просмотров на один из предыдущих контроллеров представления?
Я пытаюсь выставить контроллер своего вида на один из предыдущих контроллеров представления в стеке просмотра. Предположим, что в моем стеке просмотра есть firstVC, secondVC, thirdVC и 4thVC. Текущий контроллер представления - четвертый, и в четвертом VC есть табличное представление. Если пользователь удалит все строки в tableview, я должен направить пользователя на secondVC. У меня возникла идея, что я создам еще один контроллер навигации и представлю его командой presentViewController. Однако это не решение моей проблемы. Потому что я вижу, что для этого случая появляется проблема с навигацией. Как я могу найти лучшее решение для этого случая?
Спасибо за ваши ответы,
С наилучшими пожеланиями
Ответы
Ответ 1
Вместо выполнения общего вызова popViewControllerAnimated:
используйте popToViewController:animated:
. Вы можете определить, удалил ли пользователь все строки в этом случае, сделайте что-нибудь подобное (иначе просто поместите один контроллер вида):
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true);
Ответ 2
Если вы хотите перейти к определенному элементу управления представлением и не знаете, что счетчик возвращается, вы можете использовать это:
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as! [UIViewController];
for aViewController in viewControllers {
if(aViewController is ViewControllerYouWantToGoTo){
self.navigationController!.popToViewController(aViewController, animated: true);
}
}
Ответ 3
После больших усилий я создал быстрое расширение назад к определенному контроллеру представления в Swift 3.0.
extension UINavigationController {
func backToViewController(viewController: Swift.AnyClass) {
for element in viewControllers as Array {
if element.isKind(of: viewController) {
self.popToViewController(element, animated: true)
break
}
}
}
}
Вызов метода:
self.navigationController?.backToViewController(viewController: BarCodeScannerVC.self)
Ответ 4
Здесь вы можете сделать это путем поиска контроллера из стека UINavigationController и с помощью цикла for и проверки состояния вашего контроллера желания, и если условие будет выполнено, оно подойдет к контроллеру отправления.
let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers
for firstViewcontroller in viewControllersStack
{
if firstViewcontroller is desireViewController
{
self.navigationController!.popToViewController(firstViewcontroller, animated: true)
}
}