在第二个标签栏项目中不显示搜索控制器的键盘

Posted

技术标签:

【中文标题】在第二个标签栏项目中不显示搜索控制器的键盘【英文标题】:Keyboard doesn't show for search controller in second tab bar item 【发布时间】:2019-08-30 12:27:26 【问题描述】:

我有一个推送UITabBarController 的导航控制器。所以,我所有的标签视图控制器都将共享同一个导航栏。到目前为止没有问题,因为我每次调用 tabBarController(_:didSelect:) 时都会设置导航项的内容。

假设我们在标签栏中只有 2 个控制器,每个控制器都有一个 UISearchController。附加到导航项后,每次调用 tabBarController(_:didSelect:) 时都会配置此搜索控制器。

直到现在,一切都按要求工作和看起来。

问题是,当我从第一个控制器点击搜索栏时,键盘出现并且搜索正常,但是当我从第二个控制器点击搜索栏时,没有任何反应。

[在第二个标签中] 我知道调用了UISearchBarDelegatesearchBarShouldBeginEditing(_:),但是如果我尝试使用该方法设置searchController.isActive = true,那么应用程序将崩溃并显示以下消息:Attempt to present UISearchController on <FirstTabViewController> whose view is not in the window hierarchy

你遇到过这个问题吗?

【问题讨论】:

【参考方案1】:

您在访问第二个视图控制器时是否将definesPresentationContext 属性设置为true?

【讨论】:

确实与definesPresentationContext的使用有关。我必须在第一个视图控制器中将 viewWillDisappear 设置为 false,并在第二个视图控制器中配置 navigationItem 时将其设置为 true。合而为一,选定的视图控制器应该定义表示上下文。

以上是关于在第二个标签栏项目中不显示搜索控制器的键盘的主要内容,如果未能解决你的问题,请参考以下文章

编辑某些字段后键盘不显示

菜单栏未显示在第二个窗口上

单个标签栏项目根据条件呈现不同的视图控制器?

使用webview在第二个活动中未显示操作栏

iPad 搜索显示控制器从第二个单元格开始显示结果

打开 TabBar 子视图