自定义inputaccessoryView中的UITextView不会重新响应第一响应者状态

时间:2017-12-18 10:06:00

标签: ios iphone swift

我有一个聊天应用程序,它实现了一个浮动文本输入字段(类似于iOS消息应用程序)作为inputAccessoryView的{​​{1}}(请参阅Apple's documentation)。

ChatViewController

我的class ChatViewController: UIViewController { override var inputAccessoryView: UIView? { return chatInputView } override var canBecomeFirstResponder: Bool { return true } ... 有一个ChatViewController子视图控制器,其中的单元格包含ChatTableViewController个文本内容可编辑的单元格。我遇到的问题是,当用户点击单元格的UITextField时,UITextField的{​​{1}}拒绝重新签署第一响应者状态,这会阻止inputAccessoryView中的内容1}}来自编辑。控制台中记录以下警告:

UITextView

我尝试直接在UITableViewCell First responder warning: '<UITextView: 0x7fc041041c00; frame = ...' rejected resignFirstResponder when being removed from hierarchy 上调用resignFirstResponderendEditing但没有成功。我不希望UIInputView重新签署第一响应者状态,因为这会导致UITextView消失。

编辑:我还会在以交互方式解除键盘时收到警告(而不是点击ChatViewController的{​​{1}}。

3 个答案:

答案 0 :(得分:1)

请您查看以下内容:

如果从超级视图中删除UITextView

  • UITextView是否已从视图层次结构中删除?
  • 如果您从超级视图中删除它之前可以resignFirstResponder

如果正在使用UITextView子类:

  • 您使用的是UITextView的子类,如果是,请执行canResignFirstResponder以返回false
  • 您可以尝试返回true

答案 1 :(得分:0)

我的解决方案:

  1. override canBecomeFirstResponder覆盖到您的inputAccessoryView和inputAccessoryView上的UITextField
  2. 当用户按下隐藏键盘或返回时,请将canBecomeFirstResponder设置为false
  3. 从其superView中删除inputAccessoryView

按隐藏键盘时仍然有警告消息,但是对我来说很好。

答案 2 :(得分:0)

在使用iOS消息应用程序和whatsApp时也会显示此警告。没有已知的方法可以消除这种情况。它没有负面影响,我相信我们应该忽略它。