ios - UITextField 子类 - 订阅事件

标签 ios swift uitextfield nsnotification

我创建了一个 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/

相关文章:

ios - 未找到目标,请重新连接设备,Xcode :Device Support File

ios - 使用 UITextField 保存文件

ios - 如何让程序填写文本字段,并确保用户无法编辑程序填写的内容?

ios - 如何为 UITextField 实现类似 NSLineBreakByTruncatingHead 的功能?

iphone - iOS : is it possible to open previous viewController after crashing and re-launch app?

ios - UIButton 动画无法正常工作

ios - 如何将相机外部矩阵转换为 SCNCamera 位置和旋转

ios - 使用用户的用户名和密码访问 google api

ios - For循环基于Swift中的数组长度

swift - NSMenu 打开时刷新菜单栏 View