由于各种原因,每当更改选择时,我都需要在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时。
有谁知道为什么会这样?
答案 0 :(得分:1)
<div class="Tab">
<div class="row">
<span class="btnCol">
<input type="button" runat="server" class="Tabbutton iconInterview TabbuttonActive" />
</span>
<span class="btnCol">
<input type="button" runat="server" class="Tabbutton iconScore " />
</span>
<span class="btnCol">
<input type="button" runat="server" class="Tabbutton iconInfo" />
</span>
<span class="btnCol">
<input type="button" runat="server" class="Tabbutton iconActions" />
</span>
</div>
</div>
当文本选择发生变化时,会调用,而不一定只在选择了另一个textView时调用。事实上,在过去的日子里,textView的selectedRange属性用于返回零(表示插入),但现在(根据Apple),选择范围的长度可能不为零。当您单击远离textView时,您的委托方法可能会触发初始textView(您要离开的那个),如果它是空的,它将为您提供所见的结果。
尝试提供textView标记并使用:
textViewDidChangeSelection(_ textView: UITextView)
看看它是否解决了您的问题。当然标签只是一个快速而肮脏的检查,你可能会在你的应用程序中使用更灵活的textView标识。