iOS中UIButton绑定Segue点击任意按钮均跳转同一页面如何解决

问题根源
你当前的跳转判断逻辑存在错误:
- 你给第一个集合视图内所有按钮设置的
restorationIdentifier为05(对应`indexPath.row`取值,`firstData`总数为6),第二个集合视图按钮的id为611 - 现有判断逻辑为「只要id小于6就跳
Good Work页面,其余跳Nice Try页面」,相当于把第一个集合视图的所有按钮(包括标题为Nice Try、id为1的按钮)全部分配到了Good Work的跳转逻辑里,根本没有区分第一个集合视图内部不同按钮的跳转目标,自然会出现点击第一个集合视图任意按钮都跳转到Good Work关联页面的问题。
修复方法
直接修改按钮点击的IBAction方法逻辑,不要用id和数组总数做判断,改为匹配按钮对应的实际标题即可,替换后的代码如下:
@IBAction func Buttons(_ sender: Any) { guard let btn = sender as? UIButton, let currentTitle = btn.currentTitle else { return } switch currentTitle { case "Good Work": performSegue(withIdentifier: "Good Work", sender: btn) case "Nice Try": performSegue(withIdentifier: "Nice Try", sender: btn) default: // 未配置跳转的按钮不做响应 break } }
额外优化建议
- 不建议使用
restorationIdentifier存储业务索引值,这个属性的设计用途是UI状态恢复,存业务数据容易引发意料外的问题。如果需要传递按钮位置,可以使用UIButton自带的tag属性,或者通过闭包、代理在cell返回时把对应indexPath回传给控制器,稳定性更高。 - 后续如果需要给更多按钮添加跳转,直接在
switch分支中新增对应匹配规则即可。
内容的提问来源于stack exchange,提问作者Dakota Davis
相关产品推荐
相关产品推荐

