【发布时间】:2019-11-06 15:01:45
【问题描述】:
我正在制作一个自定义 UITextView 子类。目的是支持占位符,而不是原生支持 UITextView。文本视图需要侦听自己的更改才能显示/隐藏占位符标签。但我不能使用委托,因为用户类可能会将委托重置为自身。在没有任何委托方法的情况下如何实现这一点?
【问题讨论】:
-
stackoverflow.com/questions/3498158/… ?像中间人一样使用协议拦截器?
我正在制作一个自定义 UITextView 子类。目的是支持占位符,而不是原生支持 UITextView。文本视图需要侦听自己的更改才能显示/隐藏占位符标签。但我不能使用委托,因为用户类可能会将委托重置为自身。在没有任何委托方法的情况下如何实现这一点?
【问题讨论】:
您不能使用delegate 似乎有点奇怪,并且可能值得检查一下没有更好的架构可以允许它,但如果它不可行,您可以使用通知来提醒您活动textView。
TextViews 问题 textDidBeginEditingNotification、textDidChangeNotification 和 textDidEndEditingNotification。
您可以订阅这些通知,将文本值与存储的版本进行比较,并做出相应的响应。
【讨论】:
您可以监听文本值的变化,并据此采取行动。 如果至少有一个字符,则隐藏占位符,如果有0个字符,则取消隐藏占位符。
class CustomTextView: UITextView {
override var text: String! {
didSet (newValue) {
let shouldHide = newValue.count > 0
placeholder.isHidden = shouldHide
}
}
}
【讨论】: