当UISearchController处于活动状态并选择了新选项卡时,UITableView将消失

kyl*_*ejm 7 objective-c uitableview uisearchbar uitabbaritem ios8

对不起,如果标题不是那么清楚,总结一下就觉得很难.

使用Xcode 6 Beta 4,目标iOS 8:

我有一个UITabBarController,它的一个控制器是一个UITableViewController(TVC).这个TVC有一个searchController属性,它是新的UISearchController,它正在取代UISearchDisplayController.像这样初始化它(我会把它添加到我的故事板但是右下角的对象库中的searchController仍然是一个UISearchDisplayController - 我应该为此提交雷达吗?):

self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchResultsUpdater = self;
self.searchController.delegate = self;
self.searchController.searchBar.frame = CGRectMake(0, 0, 320, 44);
self.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)

如果searchBar是第一响应者,那就明白了:

UISearchController处于活动状态,我即将在tabBar上选择另一个选项卡并返回

然后在tabBar上选择另一个选项卡,然后你回来:

tableView已经消失了

我不知道为什么会这样?或许UISearchController错误?或者是文档没有告诉我我应该做的事情(目前缺乏细节).

fat*_*oku 5

我得到了我UISearchController6的β-5的感谢,没有任何问题的工作在Xcode中,以这个样本项目,我在GitHub上找到.

给予信用到期的信用,我认为dempseyatgithub做得非常出色,可以让每个人都可以用作参考项目.谢谢!

  • 太棒了,谢谢!这向我揭示了这个问题.我必须在我的UITableViewController中指定`self.definesPresentationContext = YES;`.虽然我还没有尝试过,但我认为这也将允许我在UISearchController的init方法中使用特定的nil(文档说"将此设置为nil以在您正在搜索的相同视图中显示搜索结果"for - (instancetype)initWithSearchResultsController:(UIViewController*)searchResultsController`)这样我就可以使用我正在搜索的UITableViewController作为结果TableView. (3认同)