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

问题描述:

在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,尤其是结合控件本身触发事件的情况下,必须要特别清楚相关的事件的触发条件和时机,或者改用手动的方式实现跳转操作。


你可能感兴趣的:(ios)