Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
故事板中的导航控制器从根控制器继承(iOS11)_Ios_Objective C_Uitableview_Uisearchbar_Ios11 - Fatal编程技术网

故事板中的导航控制器从根控制器继承(iOS11)

故事板中的导航控制器从根控制器继承(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

在我的应用程序中,我有一个导航控制器(N1),通过搜索栏控制一个tableview控制器(T1)。 当搜索栏处于活动状态时,序列图像板会显示一个新的导航控制器(N2)以显示搜索结果。(见图)

在iOS 11之前,搜索栏从tableview标题移动到导航栏,这一切都很好

部分解决方案是区分操作系统版本,如下所示:

-(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也显示搜索栏

谢谢你的见解