我已经创建了一个UITextField的子类,它有自己的视觉风格和功能。功能是将用户限制为十进制货币值(例如,3.50),但这并不是真正相关,因为我知道我的算法有效。问题是我想在文本字段子类本身中包含该逻辑。到目前为止,我已经成功捕获了textFieldDidBeginEditing和textFieldDidEndEditing的委托等价物:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didBeginEditing", name: UITextFieldTextDidBeginEditingNotification, object: self)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didEndEditing", name: UITextFieldTextDidEndEditingNotification, object: self)
运作良好。现在我需要一种方法来检查用户是否输入有效输入并仅在该字符有效时更新其文本(如shouldChangeCharactersInRange,但没有委托),但我需要在该文本字段子类本身内执行此操作。否则,我只是在每个具有此类字段的视图控制器中重新编写40行代码。
答案 0 :(得分:3)
到目前为止,我已经成功捕获了textFieldDidBeginEditing和textFieldDidEndEditing的委托等价物
但你已经走错了路。不要使用通知;没有必要。
只需让UITextField子类使self
成为self
的委托!
self.delegate = self
现在所有UITextFieldDelegate methods都将到达UITextField子类本身。实现您感兴趣的任何方法,就在子类中,并且您已完成。
然而,这种方法有一个缺点:你被盗了#34;文本字段的委托,不能轻易地使其他对象成为委托。所以这是另一种方法:将UITextField子类设置为其自己的Editing Changed
事件的目标。这样做的好处是它不会阻止其他对象成为目标,因为UIControl事件可以发送到多个目标。
(当然,我想你可以使用UITextFieldTextDidChangeNotification
代替。)