快速在2个独立的textView上进行textViewDidBeginEditing

时间:2018-09-29 06:22:23

标签: swift uitextview uitextviewdelegate

我有2个独立的textView,要在它们各自点击时触发一个事件。 termTextView可以很好地触发,但是当先触发termTextView时,点击它时不会触发definitionTextView。我该怎么做才能解决此问题?

ALL

3 个答案:

答案 0 :(得分:1)

这不是您使用UITextViewDelegate的方式。当在其委托设置为此目标的任何文本视图上开始编辑时,将调用相同的委托方法。您需要检查一下它的内部,以了解哪个文本视图调用了它。

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView === termTextView {
        // do something to termTextView
    } else if textView === definitionTextView {
        // do something to definitionTextView
    } else {
        // handle other text views
    }
}

答案 1 :(得分:0)

您需要将private func textViewDidBeginEditing2(_ definitionTextView: UITextView)更改为func textViewDidBeginEditing(_ definitionTextView: UITextView)

答案 2 :(得分:0)

正如Text Programming Guide用于跟踪多个textField和textViews编码所建议的那样,最好使用一个委托方法来管理它们,而不是使用单独的自定义委托方法(可能在必要的情况下除外)。您可以使用两种不同的样式来遵循本指南

1。为每个TextView设置一个标记,您的委托方法应类似于:

func textViewDidBeginEditing(_ textView: UITextView) {
  switch texView.tag {
    case 1:
       //Handle Text View with tag 1
       return
    case 2:
       //Handle Text View with tag 1
       return
   default:
       return
   }

2。使用您定义的textView对象

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView == termTextView {
       //Do sth to termTextView
    } else if textView == definitionTextView {
       //Do sth to definitionTextView
    }
}

如果您需要使用多个委托方法,只需使用:

func textViewDidBeginEditing(_ definitionTextView: UITextView)

代替:

private func textViewDidBeginEditing2(_ definitionTextView: UITextView)

希望对您有帮助。