Ios 自定义inputaccessoryView中的UITextView未放弃第一响应者状态
我有一个聊天应用程序,它实现了一个浮动文本输入字段(类似于iOS消息应用程序),作为我的Ios 自定义inputaccessoryView中的UITextView未放弃第一响应者状态,ios,iphone,swift,Ios,Iphone,Swift,我有一个聊天应用程序,它实现了一个浮动文本输入字段(类似于iOS消息应用程序),作为我的ChatViewController的inputAccessoryView(请参阅) MyChatViewController有一个ChatTableViewController子视图控制器,它的单元格包含文本内容可编辑的UITextFields。我遇到的问题是,当用户点击单元格的UITextField时,inputAccessoryView的UITextView拒绝退出第一响应者状态,这会阻止编辑UITab
ChatViewController
的inputAccessoryView
(请参阅)
MyChatViewController
有一个ChatTableViewController
子视图控制器,它的单元格包含文本内容可编辑的UITextField
s。我遇到的问题是,当用户点击单元格的UITextField
时,inputAccessoryView
的UITextView
拒绝退出第一响应者状态,这会阻止编辑UITableViewCell
中的内容。控制台中记录了以下警告:
First responder warning: '<UITextView: 0x7fc041041c00;
frame = ...' rejected resignFirstResponder when being removed from hierarchy
第一响应者警告:'请检查以下内容:
如果从超级视图中删除了UITextView
:
- 是否从视图层次结构中删除
UITextView
- 如果是这样的话,您可以在将FirstResponder从超级视图中删除之前辞职
如果正在使用UITextView
子类:
- 您是否使用了
UITextView
的子类,如果是,您是否实现了canResignFirstResponder
以返回false
- 你能试着返回
true
吗
我的解决方案:
覆盖可以成为inputAccessoryView和inputAccessoryView上的UITextField的第一响应程序
当用户按下隐藏键盘或返回键时,将canBecomeFirstResponder设置为false
从超级视图中删除inputAccessoryView
按下隐藏键盘时仍会显示警告消息,但对我来说效果很好。使用iOS消息应用程序和whatsApp时也会显示此警告。没有已知的方法可以消除这种情况。它没有负面影响,我认为我们应该忽略它。尝试[self.view endEditing:YES]或[UIApplication sharedApplication]sendAction:@selector(resignFirstResponder)to:nil from:nil forEvent:nil];你能把相关的类上传到github上吗?或者发邮件过来吗?@blau我面临着同样的问题。有什么解决办法吗?@Yuvrajsinh你找到了解决办法吗?@Edan有人找到了解决办法吗?我不会从superview中删除UITextView
。第一响应程序更改后,UITextView
的superview仍然是自定义的UIInputView
子类。我还只是使用了一个普通的UITextView
(不是子类)。可能是superView
可用,但superView的superView
可能是nil
。在到达窗口之前,您是否可以反复检查superView
UITextView
需要在层次结构中才能关闭键盘我已经按照您的建议完成了,层次结构如下:UITextView
-ChatInputView
-UIInputSetHostView
-UIInputSetContainerView
-UITextEffectsWidow
。正如您所建议的那样,UITextView
不是应用程序视图层次结构的一部分,因为我无法递归地访问窗口。我不确定为什么会发生这种情况。我不认为我必须手动将其添加到视图层次结构中,因为我读过的所有文档都表明,需要做的只是覆盖视图控制器中的inputAccessoryView
属性,并且应该处理它。什么是UITextEffectsWindow
?我可以想象,通常您会直接/间接地将子视图添加到UIViewController.view
。尽量保持简单,在新项目中尝试。
First responder warning: '<UITextView: 0x7fc041041c00;
frame = ...' rejected resignFirstResponder when being removed from hierarchy