获取没有委托的 UITextView 文本

Posted

技术标签:

【中文标题】获取没有委托的 UITextView 文本【英文标题】:Get UITextView text without delegate 【发布时间】:2015-11-29 17:56:43 【问题描述】:

我尝试通过子类化 UITextField 并使用 Google Place Autocomplete API 来创建位置自动完成文本视图类。这很好用,但由于实施,我有一个设计错误。为了观察用户何时键入文本,我在自定义子类中将UITextFieldDelegate 设置为self,并跟踪textView:shouldChangeTextInRange:replacementText: 中键入文本的更改。这可行,但这是设计错误:如果有人现在想通过将委托设置为新的东西来检查自定义子类中输入的内容,那么我的类的委托不再设置为类本身的对象。现在自定义类没用了。有没有办法在没有委托的情况下获取文本,防止委托被更改,或者以任何其他方式解决我的问题?

虽然我有几个选项可能会奏效,但效果不佳:

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

【问题讨论】:

【参考方案1】:

UIKit 中的委托通常是一对一的连接。这可能会导致您描述的问题。

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

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

Delegation to multiple objects

【讨论】:

以上是关于获取没有委托的 UITextView 文本的主要内容,如果未能解决你的问题,请参考以下文章

自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?

从UITextView创建PDF

获取UItextView中的行数

在 UITextView 委托方法 textViewDidChange 中将文本保存在 Core Data 中是不是有效?

Swift:在 UITextView 中使用占位符文本禁用空白/换行符文本的栏按钮

UITextView 委托未获得所有方法调用