Dav*_*e G 2 viewdidload ios segue uistoryboardsegue swift
问题摘要
我的mainVC - >第二次VC转换似乎运行了两次.然而,奇怪的是第二个VC的viewDidLoad只运行一次.这是我的项目中唯一存在此问题的转换.
我已经研究了这个并发现了两次加载问题,但没有一个与我的转换两次匹配,但加载一次场景.常见问题,例如在故事板中添加了两个segue的人,没有出现在我的项目中:
在我的第一个/根视图控制器(称为mainVC)中,我以编程方式在viewDidLoad中添加边缘平移手势:
let panLeftEdgeGesture_MainVC = UIScreenEdgePanGestureRecognizer(target: self, action: "panLeftEdge_toLifeList:")
panLeftEdgeGesture_MainVC.edges = .Left
view.addGestureRecognizer(panLeftEdgeGesture_MainVC)
Run Code Online (Sandbox Code Playgroud)
当用户滑动该平移手势时,它会触发一个调用segue到下一个VC的函数.问题是,VC转换出现两次,然后一切正常.什么都没有破裂或崩溃.如果我单击我的自定义后退按钮,则退回到mainVC只会出现一次.
关于原因的实验
这是一个奇怪的部分:为了理解什么是理解,我插入了一些println代码,这是控制台打印的内容:
No matching prepareForSegue: So did nothing to prepare.
LifeList_CollectionView viewDidLoad did run
Pan segue from mainVC to Life Lists did run
No matching prepareForSegue: So did nothing to prepare.
Run Code Online (Sandbox Code Playgroud)
第一行是prepareForSegue运行.它说"什么也没做",因为在我的prepareForSegue中它会检查哪个segue正在运行,有时它会传递一些代码.在这种情况下,prepareForSegue只会打印该行.
第二行是第二个VC的viewDidLoad运行.
第三行看起来很怪异而且不合适我,但我不是专家.println位于mainVC中,并且由pan手势调用的函数打印,这是首先触发segue的函数.为什么这不会在第二个VC的viewDidLoad之前打印?:
func panLeftEdge_toLifeList(sender: UIScreenEdgePanGestureRecognizer) {
performSegueWithIdentifier("segueToLifeLists", sender: nil)
println("Pan segue from mainVC to Life Lists did run")
}
Run Code Online (Sandbox Code Playgroud)
第四行是mainVC的第二次运行的prepareForSegue.但是,我没有看到控制台打印第二个viewDidLoad,即使在视觉上我看到转换发生两次.
知道什么可能导致这种奇怪的行为,或者至少,任何技巧来阻止这种行为?
Sae*_*ade 10
我几乎遇到了同样的问题,我的第二个VC滑了两次.问题在于我的那个segue箭头Main.storyboard.我控制 - 从第一个VC中的按钮而不是我的VC(每个VC顶部的那个小黄色圆圈)拖动,所以我删除了那个segue箭头并控制 - 从VC黄色圆圈拖到我的第二个VC并修复了问题.
这也是我使用performSegue函数的方式:
@IBAction func toSignUp(_ sender: Any) {
performSegue(withIdentifier: "signUp", sender: nil)
}
Run Code Online (Sandbox Code Playgroud)
希望这有用.
| 归档时间: |
|
| 查看次数: |
3439 次 |
| 最近记录: |