как выполнить переход в контроллере представления назначения Segue - PullRequest
0 голосов
/ 18 января 2020

В текущем контроллере вида, называемом OnBoarding, есть кнопка с действием:

@IBAction func jump(_ sender: Any) {
    if UserDefaults.standard.bool(forKey: "UserLog"){
        self.performSegue(withIdentifier: "goHome", sender: nil)
    }else{
        self.performSegue(withIdentifier: "goLogin", sender: nil)
    }
}

, поэтому, если есть логин, пользователь переходит в дом, но не получает информацию, затем переходит в логин, ( ViewController ), контроллер вида входа в систему имеет функцию registerViewController, в которой есть кнопка для возврата к входу в систему и после того, как процесс регистрации возвращается на экран входа в систему, поэтому теперь после действия onboardingViewController вместо go для входа в систему появляется следующий экран должен быть зарегистрирован, я ищу способ команды для loginviewController выполнить переход от onBoardingViewController. пробовал этот код, но, кажется, не работает.

 if segue.identifier == "goLogin"{
        let vc = segue.destination as! ViewController
        vc.performSegue(withIdentifier: "register", sender: nil)
 }

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

1 Ответ

1 голос
/ 18 января 2020

Не работает, потому что vc не входит в иерархию window, при вызове метода performSegue(withIdentifier:sender:).

Решение

Вызов performSegue(withIdentifier:sender:) метод, один раз vc на экране. Для этого используется метод класса UIViewController perform(_:animated:completion:).

if segue.identifier == "goLogin"{
    let vc = segue.destination as! ViewController
    present(vc, animated: true, completion: {
        vc.performSegue(withIdentifier: "register", sender: nil)
    })
}

, а замыкающие замыкания метода можно перемещать за скобки

if segue.identifier == "goLogin"{
    let vc = segue.destination as! ViewController
    present(vc, animated: true) {
        vc.performSegue(withIdentifier: "register", sender: nil)
    }
}
...