![](/img/trans.png)
[英]How can a UIButton listen to changes to other Buttons, a change to a UILabel's text, and a change to a UITextView all at the same time
[英]How can a UITextView listen on its own changes without delegate
我正在制作一个自定义 UITextView 子类。 目的是支持占位符,而不是原生支持 UITextView。 文本视图需要监听自己的变化,以便显示/隐藏占位符 label。 但我不能使用委托,因为用户 class 可能会将委托重置为自身。 在没有任何委托方法的情况下如何实现这一点?
您不能使用delegate
似乎有点奇怪,并且可能值得检查没有更好的架构允许它,但如果它不可行,您可以使用通知来提醒您textView
中的活动。
TextViews 发出textDidBeginEditingNotification
、 textDidChangeNotification
和textDidEndEditingNotification
。
您可以订阅这些通知,将文本值与存储的版本进行比较,并做出相应的响应。
此页面上的详细信息: textView 通知的 Apple 文档
您可以监听文本值的变化,并对其采取行动。 如果至少有一个字符,那么我们隐藏占位符,如果有 0 个字符,我们取消隐藏占位符。
class CustomTextView: UITextView {
override var text: String! {
didSet (newValue) {
let shouldHide = newValue.count > 0
placeholder.isHidden = shouldHide
}
}
}
但我不能使用委托,因为用户 class 可能会将委托重置为自身。 在没有任何委托方法的情况下如何实现这一点?
为什么会这样做? 您是否将YourTextView.delegate = self
放在多个地方? 您是否已经尝试过委托?
这是代表的代码:
func textViewDidEndEditing(_ textView: UITextView) {
}
如果您真的不想使用委托,您可以使用一个计时器来非常频繁地检查 textview 并将其与您存储的先前值进行比较。 您还可以检查键盘操作,然后检查 textview。
let timer = Timer(timeInterval: 0.0, repeats: true) { _ in
//put a conditional here that compares the textview text to the previously stored value
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.