我创建了一个 UITextField 的子类,它有自己的视觉风格和功能。功能是将用户限制为十进制货币值(例如 3.50),但这并不真正相关,因为我知道我的算法有效。问题是我想在文本字段子类本身中包含该逻辑。到目前为止,我已经成功地捕获了 textFieldDidBeginEditing 和 textFieldDidEndEditing 的委托(delegate)等效项:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didBeginEditing", name: UITextFieldTextDidBeginEditingNotification, object: self)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didEndEditing", name: UITextFieldTextDidEndEditingNotification, object: self)
工作顺利。现在我需要一种方法来检查用户是否正在输入有效输入并仅在该字符有效时更新其文本(如 shouldChangeCharactersInRange,但没有委托(delegate)),但我需要从该文本字段子类本身中执行此操作。否则,我只是在每个具有此类字段的 View Controller 中重新粘贴 40 行代码。
最佳答案
So far I've succeeded in capturing the delegate equivalents of textFieldDidBeginEditing and textFieldDidEndEditing
但是你走错了路。不要使用通知;没有必要。
只需让 UITextField 子类使 self
成为 self
的委托(delegate)!
self.delegate = self
现在所有的UITextFieldDelegate methods将到达 UITextField 子类本身。实现您感兴趣的任何方法,就在子类中,您就完成了。
但是,这种方法有一个缺点:您已经“窃取”了文本字段的委托(delegate)并且不能轻易地使其他对象成为委托(delegate)。所以这是另一种方法:将 UITextField 子类设置为它自己的 Editing Changed
事件的 target。这样做的好处是它不会阻止其他对象成为目标,因为 UIControl 事件可以发送到多个目标。
(当然,我想您可以改用UITextFieldTextDidChangeNotification
。)
关于ios - UITextField 子类 - 订阅事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441943/