单击另一个 UITextView 时结束编辑

Posted

技术标签:

【中文标题】单击另一个 UITextView 时结束编辑【英文标题】:End editing when clicking on another UITextView 【发布时间】:2015-07-27 07:32:24 【问题描述】:

我有一个带有多个海关单元格的 UITableViewController,每个单元格都包含一个 UITextView。我希望这样,如果用户正在编辑单元格 A,然后单击单元格 B,则单元格 A 结束编辑,但单元格 B 开始编辑。

现在我有以下手势识别器,当在 tableView 外部单击时结束单元格的编辑:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                               initWithTarget:self
                               action:@selector(dismissKeyboard)];
[tap setCancelsTouchesInView:NO];
[self.view addGestureRecognizer:tap];

但是当点击另一个 UITextView 时,这个 textview 会调用 shouldBeginEditingafterwards,因此会被忽略。

我尝试使用 textViewShouldBeginEditing / textViewShouldEndEditingfunctions 但没有成功。我不知道我是应该追求这个方向还是创建另一个具有自定义关联动作的手势识别器?

【问题讨论】:

【参考方案1】:

您需要设置很多东西才能使其正常工作。

您所有的UITextField 都需要设置他们的代表。您需要跟踪当前是否正在编辑 UITextField。如果是这样,您需要致电resignFirstResponder 否则您将让您新点击的UITextField 开始编辑。

代码看起来像这样。

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 

    if self.currentTextField == nil 
    
      self.currentTextField = textField
      return true 
     
    else 
    
      self.currentTextField!.resignFirstResponder()
      self.currentTextField = nil
    

【讨论】:

谢谢,这正是我想要的!我认为最好将resignFirstResponder 部分放在textFieldDidEndEditing 部分中(对于用户在tableView 之外点击的情况)。

以上是关于单击另一个 UITextView 时结束编辑的主要内容,如果未能解决你的问题,请参考以下文章

选择另一个 UITextView 时,如何阻止 UITextView 退出第一响应者/关闭键盘?

可变高度 UITextView

我如何区分和引用以编程方式创建的各种 UITextView?

单击时 UITextView 未打开 URL

如何从 UIPopover 中的 UIButton 在主 UIView 中创建 UITextView?

UITextView 避免 collectionViewCell 被点击