Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义inputaccessoryView中的UITextView未放弃第一响应者状态_Ios_Iphone_Swift - Fatal编程技术网

Ios 自定义inputaccessoryView中的UITextView未放弃第一响应者状态

Ios 自定义inputaccessoryView中的UITextView未放弃第一响应者状态,ios,iphone,swift,Ios,Iphone,Swift,我有一个聊天应用程序,它实现了一个浮动文本输入字段(类似于iOS消息应用程序),作为我的ChatViewController的inputAccessoryView(请参阅) MyChatViewController有一个ChatTableViewController子视图控制器,它的单元格包含文本内容可编辑的UITextFields。我遇到的问题是,当用户点击单元格的UITextField时,inputAccessoryView的UITextView拒绝退出第一响应者状态,这会阻止编辑UITab

我有一个聊天应用程序,它实现了一个浮动文本输入字段(类似于iOS消息应用程序),作为我的
ChatViewController
inputAccessoryView
(请参阅)

My
ChatViewController
有一个
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