故事板中的导航控制器从根控制器继承(iOS11)
在我的应用程序中,我有一个导航控制器(N1),通过搜索栏控制一个tableview控制器(T1)。 当搜索栏处于活动状态时,序列图像板会显示一个新的导航控制器(N2)以显示搜索结果。(见图) 在iOS 11之前,搜索栏从tableview标题移动到导航栏,这一切都很好 部分解决方案是区分操作系统版本,如下所示:故事板中的导航控制器从根控制器继承(iOS11),ios,objective-c,uitableview,uisearchbar,ios11,Ios,Objective C,Uitableview,Uisearchbar,Ios11,在我的应用程序中,我有一个导航控制器(N1),通过搜索栏控制一个tableview控制器(T1)。 当搜索栏处于活动状态时,序列图像板会显示一个新的导航控制器(N2)以显示搜索结果。(见图) 在iOS 11之前,搜索栏从tableview标题移动到导航栏,这一切都很好 部分解决方案是区分操作系统版本,如下所示: -(void)initSearchController{ UINavigationController *searchResultsController = [[self st
-(void)initSearchController{
UINavigationController *searchResultsController = [[self storyboard] instantiateViewControllerWithIdentifier:@"TableSearchResultsNavController"];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
self.searchController.searchResultsUpdater = self;
self.searchController.hidesNavigationBarDuringPresentation = NO;
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = self.searchController;
//searchResultsController.navigationItem.searchController = self.searchController;
} else {
self.tableView.tableHeaderView = self.searchController.searchBar;
}
}
但是,由于iOS 11中搜索栏的新位置,一旦显示搜索结果,搜索框就会消失,因为它是导航栏的一部分,已被alien storyboard navcontroller替换
我还修改了一个方法,该方法在搜索栏变为活动状态时调用,如下所示,但搜索栏仍会消失:
// Called when the search bar becomes first responder
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
NSString *searchString = self.searchController.searchBar.text;
[self updateFilteredContentForSearchString:searchString];
if (self.searchController.searchResultsController) {
UINavigationController *navController = (UINavigationController *)self.searchController.searchResultsController;
SearchResultsTableViewController *vc = (SearchResultsTableViewController *)navController.topViewController;
self.searchController.dimsBackgroundDuringPresentation = false;
//my attempt, to no avail
if (@available(iOS 11.0, *)) {
vc.navigationItem.searchController = self.searchController;
} else {
vc.searchController=self.searchController;
}
vc.searchResults = self.searchResults;
[vc.tv reloadData];
}
}
解决这个问题的方法是什么?我希望该应用程序与11之前的操作系统(至少iOS10)保持兼容
我是否必须完全重新设计这个机制(如果是,怎么做?),还是只有一行简单的代码可以告诉控制器N2也显示搜索栏
谢谢你的见解