无需委托即可获取UITextView文本

时间:2015-11-29 17:56:44

标签: ios swift delegates uitextfield uitextfielddelegate

我尝试通过继承UITextField并使用Google Place Autocomplete API创建位置自动填充文本视图类。这很好用,但由于实现,我有一个设计错误。要观察用户输入文字的时间,我会在自定义子类中将UITextFieldDelegate设置为self,并跟踪textView:shouldChangeTextInRange:replacementText:中键入文本的更改。这是有效的,但这是设计错误:如果有人现在想通过将委托设置为新的来检查键入自定义子类的内容,则我的类的委托不再设置为类本身的对象。现在自定义类是没用的。有没有办法获得文本,因为它是在没有代理的情况下键入的,阻止代理被更改,或以任何其他方式修复我的问题?

我可以使用的一些选项可以使用,但方式不好:

  • 定期检查text属性是什么:应该明白为什么忙碌的等待是一个愚蠢的想法
  • 覆盖委托属性并将其设置为私有:不确定这是否可行,但如果确实如此,则该类不再是UITextField的正确子类,并且在实现我的子类时所有委托方法都不可用。
  • 提供新委托以进一步使用委托:允许某人获得与UITextFieldDelegate提供的内容相同的内容,但仍然会弄乱文档并正确实施UITextField

1 个答案:

答案 0 :(得分:0)

UIKit的代表我通常是一对一的联系。这可能会导致您所描述的问题。

如果你想要一个UITextField的多个委托我将从UITextField派生一个类,例如MYTextField,并添加一个方法addDelegate和removeDelegate,维护委托列表。将MYTextField的委托发送给自己,并将任何委托方法广播到委托数组中的所有侦听器。

这篇文章展示了如何维护多个代表列表的示例代码。

Delegation to multiple objects