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)
希望对你有所帮助
我有 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)
希望对你有所帮助