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` 方法中首次分配失败

textViewDidBeginEditing 快速在 2 个单独的 textViews 上

NSLayoutConstraint 激活/停用

IOS textView 委托

无法在 Swift 中滚动 textview

UITextView 没有在 UICollectionViewCell 内启动