【发布时间】:2021-03-08 18:53:50
【问题描述】:
我有多个 uitextviews 以及它们各自的浅灰色占位符文本 onLoad。代表已正确设置。
我的目标是,在任何uitextview 点击时,如果占位符存在,则将光标选择到uitextview 的开头。
我的问题是,当我最初在占位符文本范围(没有文本的空白区域)之外点击时,textviewdidchangeselection 委托甚至不会触发,并且光标从占位符文本的末尾开始。当我最初点击占位符文本时,一切正常。当我最初点击占位符文本然后尝试在占位符文本范围之外点击时,一切正常。
对它为什么会这样表现有任何想法吗?我尝试了.selectedRange 和.selectedTextRange 均无济于事。
func onLoad() {
textView1.text = placeHolderText1
textView1.textColor = UIColor.lightGray
textView2.text = placeHolderText2
textView2.textColor = UIColor.lightGray
textView1.textContainerInset.left = 4
textView1.layer.cornerRadius = 2
textView1.layer.masksToBounds = true
textView1.delegate = self
textView2.textContainerInset.left = 4
textView2.layer.cornerRadius = 2
textView2.layer.masksToBounds = true
textView2.delegate = self
}
func textViewDidChangeSelection(_ textView: UITextView) {
if self.view.window != nil {
if textView == textView1 {
if textView.textColor == UIColor.lightGray && textView.text == placeHolderText1 {
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
}
} else if textView == textView2 {
if textView.textColor == UIColor.lightGray && textView.text == placeHolderText2 {
textView.selectedRange = NSMakeRange(0, 0)
}
}
}
}
【问题讨论】:
-
@LeoDabus 我实际上已经尝试从主线程更新,但它并没有解决我遇到的行为......
标签: ios swift uitextview