Как открыть VC, чтобы перейти на два предыдущих View Controller с помощью Swift Language? - PullRequest
1 голос
/ 07 октября 2019

У меня есть 4 вида контроллеров: Добро пожаловать, Регистрация, Логин, Забыли пароль. Добро пожаловать спрашивает, есть ли у пользователя учетная запись. Если да, ожидается, что пользователь нажмет кнопку «Вход», в противном случае пользователь должен нажать кнопку «Зарегистрироваться».

Если пользователь нажмет кнопку «Зарегистрироваться», приложение перейдет к контроллеру представления SignUp, пользователь заполнит форму и нажмет кнопку «Зарегистрироваться». Нажмите на эту кнопку SignUp должен отобразить Login VC. Но вместо этого он вернулся в Main VC, который приветствуется.

//This is the SignUp Action Btn 

@IBAction func actSingUp(_ sender: Any) {

    let storyboard = UIStoryboard(name: "LoginSB", bundle: nil)
    let signupvc = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LoginVC
    navigationController?.popViewController(animated: true)

}

Ответы [ 4 ]

1 голос
/ 08 октября 2019

Вы pop ping (возвращаясь к предыдущему контроллеру) вместо push ing (добавление нового) представления контроллера. Что вы должны сделать, это:

@IBAction func actSingUp(_ sender: Any) {

   let storyboard = UIStoryboard(name: "LoginSB", bundle: nil)
   let signupvc = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LoginVC

   // this step is optional, it will remove SignUp controller from navigation stack
   navigationController?.popViewController(animated: false)

   // present login controller
   navigationController?.pushViewController(signupvc, animated: true)   
}
1 голос
/ 07 октября 2019

Ваш код не имеет никакого смысла. Вы создаете новый loginVC, а затем игнорируете его и выполняете всплывающее окно.

Если вы хотите поместить новый контроллер представления в стек навигации, используйте push, а не pop. (pushViewController(_:animated:)).

0 голосов
/ 08 октября 2019
guard let loginVC = navigationController?.viewControllers.first(where: { $0 is LoginVC}) as? LoginVC else { return }

navigationController?.popToViewController(loginVC, animated: true)
0 голосов
/ 07 октября 2019

Если вам нужно выскочить 2 просмотра

let vcs = self.navigationController!.viewControllers
let last2VC = vcs[vcs.count - 3] // if count = 4 then it will go to vc num 2 with index 1
self.navigationController?.popToViewController(last2VC,animated:true)

ИЛИ

 for vc in vcs {
   if vc is LoginVC {
      self.navigationController?.popToViewController(vc,animated:true)
      break
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...