swift 中 2 个单独的 textView 上的 textViewDidBeginEditing

textViewDidBeginEditing on 2 separate textViews in swift

我有 2 个单独的 textView,我想在它们被点击时触发一个事件。 termTextView 可以正常触发,但是当首先触发 termTextView 时,definitionTextView 在点击时不会触发。我该怎么做才能解决这个问题?

extension saveScreenViewController: UITextViewDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {

    }
    func textViewDidBeginEditing(_ termTextView: UITextView){
        if(self.termTextView.text == "type term here..."){
        termTextView.text = ""
        termTextView.textColor = #colorLiteral(red: 0.1298420429, green: 0.1298461258, blue: 0.1298439503, alpha: 1)
        }
    }

    private func textViewDidBeginEditing2(_ definitionTextView: UITextView) {
        if(self.definitionTextView.text == "type definition here..."){
        definitionTextView.text = ""
        definitionTextView.textColor = #colorLiteral(red: 0.1298420429, green: 0.1298461258, blue: 0.1298439503, alpha: 1)
        }
    }
}

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

这不是您使用 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
    }
}

正如 Text Programming Guide 跟踪多个 textFields 和 textViews 编码所建议的那样,最好使用一种委托方法来管理它们,而不是使用单独的自定义委托方法(可能除非您必须这样做)。你可以使用两种不同的风格来接近这个指南

1.Set 每个 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.Use 您定义的 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)

希望对你有所帮助