textViewDidBeginEditing 快速在 2 个单独的 textViews 上
Posted
技术标签:
【中文标题】textViewDidBeginEditing 快速在 2 个单独的 textViews 上【英文标题】:textViewDidBeginEditing on 2 separate textViews in swift 【发布时间】:2018-09-29 06:22:22 【问题描述】:我有 2 个单独的文本视图,我想在每个文本视图被点击时触发一个事件。 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)
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:正如 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)
希望对你有帮助。
【讨论】:
【参考方案3】:您需要将private func textViewDidBeginEditing2(_ definitionTextView: UITextView)
更改为func textViewDidBeginEditing(_ definitionTextView: UITextView)
【讨论】:
以上是关于textViewDidBeginEditing 快速在 2 个单独的 textViews 上的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 中的 UITextView 在 `textViewDidBeginEditing` 方法中首次分配失败