在iOS中,我在由导航控制器控制的UITableViewController
场景中有一个UITextField
。所有静态单元格。文本字段的"Clear on editing"标志打开了。我想获得并保存在字段中输入的值,所以我有-editingDidEnd:
动作在自定义UITableViewController
子类中调用我的saveData:
方法。如果我点击文本字段外,一切正常。但是,如果我使用后退导航按钮退出场景,那么saveData:
将被调用两次。一次使用输入的值,第二次使用空值。这似乎是不正确的行为。
我做了一个演示项目,并将其发布到GitHub: https://github.com/davehirsch/BugDemo
我做错了什么吗?这是iOS的bug吗?这似乎不太可能是一个没有人发现的bug(我已经查看了其他报告类似事情的人)。我正在运行最新的非测试版的Xcode和OS X,这个bug发生在iOS模拟器上(但我不确定它是否会发生在真正的设备上,我猜)。
你是对的。这看起来像是UINavigationController
中的一个bug。
在动画前后分别调用[UITextField resignFirstResponder]
方法。第一次调用由[UINavigationController popViewControllerAnimated:]
完成,第二次调用在[UINavigationConteoller navigationTransitionView:didEndTransition:fromView:toView:]
中调用[UIView(Hierarchy) _removeFirstResponderFromSubtree]
。
看起来你的文本字段在动画结束前还没有作为第一响应者辞职。
[编辑]
我建议看一下rdelmar注释