Подтвердить что ты не робот

Как быстро настроить контроллер просмотров на один из предыдущих контроллеров представления?

Я пытаюсь выставить контроллер своего вида на один из предыдущих контроллеров представления в стеке просмотра. Предположим, что в моем стеке просмотра есть firstVC, secondVC, thirdVC и 4thVC. Текущий контроллер представления - четвертый, и в четвертом VC есть табличное представление. Если пользователь удалит все строки в tableview, я должен направить пользователя на secondVC. У меня возникла идея, что я создам еще один контроллер навигации и представлю его командой presentViewController. Однако это не решение моей проблемы. Потому что я вижу, что для этого случая появляется проблема с навигацией. Как я могу найти лучшее решение для этого случая?

Спасибо за ваши ответы, С наилучшими пожеланиями

4b9b3361

Ответ 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)
           }
      }