从搜索结果表(UISearchController)导航到视图(推送)并保持搜索结果到位

时间:2017-01-19 17:01:21

标签: ios objective-c swift uisearchcontroller

我有一个搜索结果表(UISearchController),它存在于导航堆栈上的视图中。我在我的视图中显示搜索控制器和表格,如下所示:

    _searchResultsTableViewController = [[CalendarSearchResultsTableViewController alloc] init];
_searchResultsTableViewController.delegate = self;

_searchController = [[UISearchController alloc] initWithSearchResultsController:_searchResultsTableViewController];
_searchController.delegate = self;
_searchController.hidesNavigationBarDuringPresentation = NO;
_searchController.dimsBackgroundDuringPresentation = YES;
_searchController.obscuresBackgroundDuringPresentation = YES;
_searchController.active = YES;

_searchController.searchBar.delegate = self;

UIEdgeInsets adjustForTabbarInsets = UIEdgeInsetsMake(0, 0, CGRectGetHeight(self.tabBarController.tabBar.frame), 0);
_searchResultsTableViewController.tableView.contentInset = adjustForTabbarInsets;
_searchResultsTableViewController.tableView.scrollIndicatorInsets = adjustForTabbarInsets;

[self.navigationController presentViewController:_searchController animated:YES completion:nil];

这会在UISearchBar上显示UINavigationBar,搜索表会按预期显示。当用户从表中选择搜索结果时,我想通过将搜索结果推到导航堆栈上来呈现选择视图,同时搜索结果保持不变。我现在使用它的方式是呈现搜索控制器的视图打开视图,但这需要解除搜索控制器,因为search result view显示在搜索结果表后面。

如何使搜索控制器将search result view推送到导航堆栈,允许用户导航回搜索结果?

我希望这项工作的一个例子可以在iOS Mail of Calendar应用程序中找到(当你搜索时)。

搜索结果控制器中的navigationController属性为零,因此我目前无法显示search result view

该项目既有Objective-C又有Swift,所以答案都很好。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

我认为您需要进行3项小改动。

  1. _searchController.hidesNavigationBarDuringPresentation = YES;
  2. [self presentViewController:_searchController animated:YES completion:nil];
  3. self.definesPresentationContext = YES; //在提供searchController的viewController的viewDidLoad