我有一个UITextFieldDelegate,它对用户输入进行了大量验证,以确定是否允许它们结束编辑。在一个特定示例中,将该字段留空是无效的。
现在我正在使用textField:shouldChangeCharactersInRange:replacementString:
在用户每次编辑后验证文本输入。
问题是:如果用户清除字段(使用小'x'按钮),验证代码将进入“无效”模式,并阻止用户导航,直到他们输入有效文本。如果用户随后摇动手机以取回旧文本,则不会再次调用shouldChangeCharactersInRange
并且代理处于“无效”状态,而不是再次识别出一切正常。
不确定我是否正确使用它,但似乎内置的UITextFieldDelegate机器无法处理由于撤消/重做而导致的文本更改。
在这种情况下,实现正确验证的最佳方法是什么?我是否真的需要将UITextField子类化以实现motionEnded:withEvent:
?看起来像UITextField中的编辑处理内容实际上应该与用户是否实际输入它或者由于撤消而发生的事情无关,所以如果我真的不得不走这条路线就会感到沮丧。
答案 0 :(得分:5)
将方法连接到UIControlEventEditingChanged事件(IB中的“编辑已更改” - 而不是“值已更改”)。
只要文本字段发生变化,这似乎就会触发。