我有一个带有UITabBarController的应用程序和一些标签,每个标签都包含一个UINavigationController。我还有一个由导航栏上的搜索按钮触发的UISearchController,它有一个自定义搜索结果视图控制器。搜索工作正常,点击取消也是如此。我实现了presentSearchController:使用
将搜索控制器呈现为视图控制器[self presentViewController:animated:completion:];
,也可以。
如果用户解雇键盘(搜索控制器处于活动状态),然后切换标签栏上的标签,返回到搜索控制器处于活动状态的原始标签页,然后点击"取消&# 34;,基础UINavigationController的视图堆栈已从主窗口层次结构中消失,并且在我切换标签并返回搜索模式处于非活动状态之前不会重新加载。
这与此问题类似:"From View Controller" disappears using UIViewControllerContextTransitioning
除非我不使用任何自定义转换,并且点按取消后仍会显示标签栏。打印视图堆栈显示标签栏是窗口的唯一子视图,直到我再次切换标签并且一切显示正常。
解决这个问题的最佳方法是什么?我真的很讨厌蛮力将导航控制器的视图重新添加到didDismissSearchController:
上的窗口,如建议的那样。这不仅是一个坏主意,而且当明确地将导航控制器重新添加到关键窗口时,我也会遇到标签栏和导航控制器的z排序问题。
答案 0 :(得分:0)
添加我的暴力解决方案:
- (void)didDismissSearchController:(UISearchController*)searchController
{
if (![self.view isDescendantOfView:[UIApplication sharedApplication].keyWindow]) {
NSUInteger currIndex = self.tabBarController.selectedIndex;
NSUInteger tempIndex = self.tabBarController.selectedIndex == 0 ? 1 : 0;
[self.tabBarController setSelectedIndex:tempIndex];
[self.tabBarController setSelectedIndex:currIndex];
}
}