UINavigationController&storyboard点击返回button时奔溃的问题

当一个UINavigationController通过storyboard进行 segue 操作时,从 A 到 B 的过程中,如果在 A 中的textfield编辑结束后点击返回button,程序会崩溃。原因是点击返回会同时触发textfield的退出编辑事件( segue2),这可能导致导航栈混乱。解决办法是避免使用在编辑事件中触发的 segue,或改用手动push操作,以确保正确管理视图控制器的导航流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

在storyboard中,一个UINavigationController(含一个rootviewcontroller)-------segue1---->uiviewcontrollerA----segue2--->uiviewcontrollerB;

segue1:在storyboard中的rootviewcontroller上的一个按钮触发,为push模式;

segue2:在storyboard中的uiviewcontrollerA上textfield的textfield中的did end on exit (即编辑框结束编辑、失去焦点、键盘收起时)事件触发,为push模式;


问题触发条件:

uiviewcontrollerA中点击textfield进入编辑状态后直接点击返回按钮(即self.navigationItem.leftBarButtonItem)程序就会奔溃,报错如下:

reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

原因:点击返回按钮时会触发textfield失去焦点、退出编辑状态,从而触发另一个segue动作,而点击按钮本身又会触发当前viewcontroller的弹出;这两个不确定那个先那个后执行,这样压栈出栈就可能出现问题,从而出现上面描述的那种情况。

解决办法:更改segue2的实现方式,改用其他事件,或者手动加载、push的方式;

经验:慎用storyboard中的segue,尤其是结合控件本身触发事件的情况下,必须要特别清楚相关的事件的触发条件和时机,或者改用手动的方式实现跳转操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值