textViewDidChangeSelection 方法认为 textView.text 为空
Posted
技术标签:
【中文标题】textViewDidChangeSelection 方法认为 textView.text 为空【英文标题】:textViewDidChangeSelection method thinks textView.text is empty 【发布时间】:2017-02-26 06:07:06 【问题描述】:出于各种原因,我需要在改变选择时在TextView中访问文本,因此我已经实现了委托方法TextViewDidChangeSelection()来执行此操作。但是,由于某种原因,当我尝试从该方法中访问 textView.text 时,有时即使它不是空的,它也会返回为空。以这段代码为例。
func textViewDidChangeSelection(_ textView: UITextView)
print("Called textViewDidChangeSelection")
if textView.text.isEmpty
print("textview is empty")
else
print("textview is not empty")
在我的代码中使用这个示例,我单击了一个非空的 textView,有时它会返回“textview 是空的”。似乎它往往在重新运行模拟器并单击任何 textView 后立即发生,但我也看到它在第一次单击 textView 时发生(在单击其他一些 textView 之后)或当我从其他视图返回包含 textViews 的 UIView 时。
有人知道为什么会这样吗?
【问题讨论】:
【参考方案1】:textViewDidChangeSelection(_ textView: UITextView)
在文本选择更改时调用,不一定仅在选择另一个 textView 时调用。事实上,在过去,textView 的 selectedRange 属性用于返回零(表示插入),但现在(根据 Apple 的说法)选择范围的长度可能不为零。当您单击离开 textView 时,您的委托方法可能会触发初始 textView(您要离开的那个),如果它是空的,它将给您看到的结果。
尝试给你的 textView 标签并使用:
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool
print("Selected \(textView.tag)")
return true
看看它是否能解决您的问题。当然,标签只是一种快速而肮脏的检查,您可能会在您的应用中使用更灵活的 textView 标识。
【讨论】:
感谢您的回答!实际上,我只是通过在textViewDidBeginEditing
方法中设置一个变量并引用它来设法找到解决方法。以上是关于textViewDidChangeSelection 方法认为 textView.text 为空的主要内容,如果未能解决你的问题,请参考以下文章