UITextField可以发送它的动作两次.这是iOS的bug,还是我犯了错误?



在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注释

最新更新