【发布时间】:2012-10-31 11:30:11
【问题描述】:
假设我将UITextView 添加到我的UIView,并且我希望它在每次内容更改时更改其背景颜色。我可以通过成为UITextView 的代表并实施textViewDidChange 来做到这一点。
如果我经常使用这种行为,创建一个UITextView 子类是有意义的,我将其称为ColorSwitchingTextView。默认情况下,它应该包含颜色切换行为,因此任何UIView 都可以简单地添加它,而不是标准的UITextView,如果它想要这种行为。
如何检测 ColorSwitchingTextView 类中内容的变化?我不认为我可以做类似self.delegate = self 的事情。
总之,UITextView 子类如何知道其内容何时发生变化?
编辑
看来我可以使用self.delegate = self,但这意味着使用ColorSwitchingTextView 的UIViewController 也不能订阅通知。一旦我在视图控制器中使用switchingTextView.delegate = self,子类的行为就不再起作用了。任何解决方法?我正在尝试获得一个自定义的UITextView,否则它就像普通的UITextView一样工作。
【问题讨论】:
-
“我不认为我可以做类似 self.delegate = self”的事情,为什么不呢?它应该可以正常工作。
-
好吧,我没有得到任何错误或任何东西,但是将 UITextView 子类设置为 UITextViewDelegate 似乎很奇怪 - 你确定这是正确的方法吗?到目前为止,我无法从 ColorSwitchingTextView 内部触发 textViewDidChange。
-
我认为将对象的委托设置为自身不是一个好主意。即使它没有抛出任何错误,它也不理想。正确的方法是覆盖 UITextView 中调用
textViewDidChange的任何方法.. 不幸的是,它的私有代码似乎无法访问/被拒绝这样做.. 虽然不太确定最后一部分.. 需要更多挖掘 -
是的 - 基于此线程 lists.apple.com/archives/Cocoa-dev/2009/Jul/msg01406.html,将委托设置为 self 似乎是个坏主意。而且,它无论如何都不起作用。
-
当然可以,我这样做是为了使 UITextViews 和具有最大行数和/或字符数的字段
标签: objective-c ios cocoa-touch uiview uitextview