首页 > 解决方案 > 如何在转场目标视图控制器中执行转场

问题描述

在当前称为 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),登录视图控制器有一个注册视图控制器的segue,有一个返回登录的按钮,注册过程返回登录后屏幕,所以现在在 onboardingViewController 操作而不是登录之后,应该注册下一个屏幕,我正在寻找一种方法来命令 loginviewController 从 onBoardingViewController 执行 segue。尝试了这段代码,但似乎不起作用。

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

我正在寻找一种简单的方法来实现这一点,而不必在入职和注册之间进行直接切换,涉及创建新的切换或呈现登录屏幕并处理呈现或不呈现的不同情况。

标签: iosswiftsegue

解决方案


它不起作用,因为在调用方法时vc不在层次结构中。windowperformSegue(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)
    }
}

推荐阅读