textViewDidChangeSelection方法认为textView.text为空

时间:2017-02-26 06:07:07

标签: ios swift textview uitextviewdelegate

由于各种原因,每当更改选择时,我都需要在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 个答案:

答案 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标识。