Как проверить, после установки ViewController, ViewController на вершине стека, является конкретным? - PullRequest
0 голосов
/ 30 сентября 2019

Предположим, я сейчас на BaseViewController. Я могу подойти к этому классу контроллеров представлений от двух других контроллеров представлений, скажем, A и B. Итак, когда я выскакиваю BaseViewController, как я могу проверить, присутствует ли A или B поверх стека? Вот мой код ниже (внутри BaseViewController):

func goToAOrBViewController {
   // If after popping viewController is A do this
   navigationController.popViewController(animated: true)
   // Id after popping viewController is B do this
   // Instantiate B and push it
}

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Вы можете одновременно выскочить и нажать кнопку просмотра контроллера.

не тестировалось:

navigationController?.viewControllers.removeLast()
let topVC = navigationController?.viewControllers.last

if topVC == A {
  navigationController?.viewControllers.append(A)
  navigationController?.setViewControllers(A, animated: false)
} else {
  navigationController?.viewControllers.append(B)
  navigationController?.setViewControllers(B, animated: false)
}
0 голосов
/ 30 сентября 2019

Внутри BaseViewController класс:

func goToAOrBViewController() {
   guard let navigationController = self.navigationController else { return }
   navigationController.popViewController(animated: false)
   guard let viewController = navigationController.topViewController else { return }
   if viewController is ViewControllerA {
      // Do something for A
   } else if viewController is ViewControllerB {
      // Do Something for B
   }
   // You need not put else-if case if you are sure BaseVC is reachable from A and B only (just use else)
}

0 голосов
/ 30 сентября 2019

Есть много способов сделать это

Первый и самый простой метод

    func visibleViewController() -> UIViewController? {
        let appDelegate = UIApplication.shared.delegate
        if let window = appDelegate!.window {
            return window?.visibleViewController
        }
        return nil
    }

    func goToAOrBViewController {
       // If after popping viewController is A do this
       navigationController.popViewController(animated: true)
       if visibleViewController() == viewControllerA{
           //Do stuff for A
       }else{
           //Do stuff for B
       }
    }

Второй и очевидный метод

    let topController = UIApplication.sharedApplication().keyWindow?.rootViewController
    if topController == viewControllerA {
        //Do stuff for A
    }else{
        //Do stuff for B
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...