我有一个搜索结果表(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,所以答案都很好。非常感谢任何帮助!
答案 0 :(得分:5)
我认为您需要进行3项小改动。
_searchController.hidesNavigationBarDuringPresentation = YES;
[self presentViewController:_searchController animated:YES completion:nil];
self.definesPresentationContext = YES;
//在提供searchController的viewController的viewDidLoad
中