ios - 如何在转场目标视图控制器中执行转场
问题描述
在当前称为 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)
}
我正在寻找一种简单的方法来实现这一点,而不必在入职和注册之间进行直接切换,涉及创建新的切换或呈现登录屏幕并处理呈现或不呈现的不同情况。
解决方案
它不起作用,因为在调用方法时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)
}
}
推荐阅读
- c# - Microsoft Bot Framework .Net 中的 Directline API 和 OAuth2 有什么区别?
- laravel - Amcharts 自定义可变颜色
- amazon-web-services - 如何预测 Fargate 容器的 IP 范围
- r - 如何在r中的线性回归中制作“期望值线”
- javascript - 无法从输入字段 daterangepicker 传递值 - Zeppelin Angular
- javascript - Nodejs 订阅按钮将我重定向到 127.0.0.1
- python - Pyinstaller 不适用于图像显示 python 应用程序?我究竟做错了什么?
- rxjs - 为什么在范围运算符中使用 asyncScheduler 关键字会推迟订阅?
- javascript - 如何使 Promise 解析在 else 语句 javascript 中触发?
- python - 检测图像中重叠的嘈杂圆圈