UITextField 子类 - 订阅事件

UITextField subclass - subscribing to events

我创建了一个 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 行代码。

So far I've succeeded in capturing the delegate equivalents of textFieldDidBeginEditing and textFieldDidEndEditing

但是你走错了路。不要使用通知;没必要。

只需让 UITextField 子类使 self 成为 self!

的委托
self.delegate = self

现在所有 UITextFieldDelegate methods 都将到达 UITextField 子类本身。在子类中实现您感兴趣的任何方法,您就完成了。

但是,这种方法有一个缺点:您有 "stolen" 文本字段的委托,无法轻易地使其他对象成为委托。所以这是另一种方法:将 UITextField 子类设置为它自己的 Editing Changed 事件的 target。这样做的好处是它不会阻止 other 对象成为目标,因为 UIControl 事件可以发送到多个目标。

(当然,我想你 可以 使用 UITextFieldTextDidChangeNotification 代替。)