使用Storyboard时按钮点击触发两次界面转场问题求助
按钮点击触发两次Storyboard界面转场的原因分析
以下是可能导致该问题的几种常见原因及排查方向:
IBAction重复绑定:按钮在Storyboard中被重复绑定了
showLoginViewController方法,或是同时通过代码和Storyboard拖拽两种方式绑定了该方法。点击按钮时会触发两次方法调用,进而执行两次performSegue。可通过查看按钮的「Connections Inspector」面板,检查是否存在重复的Action条目。Segue重复触发:除了代码中手动调用
performSegue,还在Storyboard中给按钮直接拖拽创建了标识符为showLoginViewController的Segue。这种情况下,点击按钮会同时触发Storyboard自带的Segue转场,以及代码中调用的Segue转场,导致两次界面切换。主线程调度逻辑问题:代码中使用
tmainQueue调度performSegue执行,如果该调度逻辑存在重复入队的情况(比如tmainQueue的封装实现有问题,或是之前有未完成的调度任务),会导致performSegue被多次调用。按钮事件重复响应:按钮的交互状态异常,或是存在手势识别器冲突。例如按钮上同时添加了Tap手势识别器,且手势和按钮自身的点击事件都处于激活状态,一次点击会被识别为两次触发源。
排查建议
- 先注释掉代码中的
performSegue(withIdentifier: "showLoginViewController", sender: nil),点击按钮观察是否仍会触发转场。如果会,说明Storyboard中存在直接绑定在按钮上的Segue,需删除该Segue。 - 在
showLoginViewController方法内添加打印日志(如print("触发转场")),确认该方法是否被调用两次,以此定位问题是方法重复执行还是performSegue被多次调用。 - 检查按钮的Connections面板,确保
showLoginViewController方法仅绑定一次。
内容的提问来源于stack exchange,提问作者Kerem DEMİR
相关产品推荐
相关产品推荐

