Нажмите viewcontroller, если его нет в стеке навигации - PullRequest
0 голосов
/ 02 мая 2018

Я хочу проверить, присутствует ли viewcontroller в стеке навигации или нет. Если он присутствует, мне нужно выложить его, в противном случае мне нужно поместить его в стек навигации. Я попробовал следующий код. Если его нет, управление переходит к блоку else, но я не могу перейти к экрану. Пожалуйста, помогите мне

 for aViewController in viewControllers! {

    if aViewController is TabProfileViewController {

      self.navigationController?.popToViewController(aViewController, animated: true)

     }

    else {

        let lvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
        self.navigationController?.pushViewController(lvc!, animated: true)
      }
}

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Надеюсь, этот код работает для вас.

    if navigationController != nil && !(navigationController?.topViewController is YOURCONTROLLER) {
        for aViewController in (navigationController?.viewControllers)! 
          {
            if aViewController is YOURCONTROLLER {
            //Your controller found
            }else{
               //push using navigation
            }
        }
    }
0 голосов
/ 02 мая 2018

Это еще один способ сделать это:

 if arrViewController != nil && !(arrViewController?.topViewController is TabProfileViewController) {
        for aViewController in (arrViewController?.viewControllers)! {
            if aViewController is Dashboard {
                _ = self.navigationController?.popToViewController(aViewController, animated: true)
                break
            }
        }
    }else{
         let lvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
         self.navigationController?.pushViewController(lvc!, animated: true)
    }
0 голосов
/ 02 мая 2018

Вы проверяете это в каждом цикле, так что если один раз первое условие истинно, возможно, оно может стать ложным в следующей итерации, поэтому оно будет выдвигаться и выдвигаться. попробуйте следующий код:

if let viewController = viewControllers?.first(where: { $0 is TabProfileViewController }) {
    navigationController?.popToViewController(viewController, animated: true)
} else {
    let lvc = storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
    navigationController?.pushViewController(lvc!, animated: true)
}
...