如何从 UISearchController 推送 VC

Posted

技术标签:

【中文标题】如何从 UISearchController 推送 VC【英文标题】:How to Push VC from UISearchController 【发布时间】:2016-02-15 19:32:42 【问题描述】:

我已经像这样设置了一个 UISearchController:

SearchTableViewController *searchView = [[SearchTableViewController alloc]initWithNibName:@"SearchTableViewController" bundle:nil];
UISearchController *searchController = [[UISearchController alloc]initWithSearchResultsController:searchView];
[searchController setDefinesPresentationContext:YES];
searchController.delegate = searchView;
searchController.searchResultsUpdater = searchView;
[self presentViewController:searchController animated:YES completion:nil];

当我试图从搜索控制器推送一些东西时:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
DetailTableViewController *seeAll = (DetailTableViewController *) [storyboard instantiateViewControllerWithIdentifier:@"DetailTableViewController"];
 NSLog(@"self.navigationController = %@", self.navigationController);
 [self.navigationController pushViewController:seeAll animated:YES];

它不起作用。由于 NSLog,我打印出 null。有人可以帮忙吗?

这是我的 IB 文件

【问题讨论】:

【参考方案1】:

由于缺少self(SearchTableViewController) 的导航堆栈,您会打印出 null。似乎没有在您的故事板中指定 UINavigationController 。你的 main.storyboard 文件是什么?使用情节提要的一种可能配置如下所示:

查看来自 Apple 的 this 示例。它具有类似的功能。 附言我不确定你是否需要这样的 SearchController:

[self presentViewController:searchController animated:YES completion:nil];

【讨论】:

好吧,我的视图层次结构有点古怪,所以要做好准备。我有一个导航控制器和一个 VC,如上所示,除了 VC 有一个分段控件,它可以加载两个视图,如 self.asd = [[asd alloc]init]; [self.view addSubview:self.asd.view]; 然后这个 VC 加载了另外三个 Xibs @MarkBourke 您能否澄清您在哪里执行问题中列出的第一个代码和平?也许您可以添加更多代码以便我能够理解上下文?如果你把这个代码:NSLog(@"self.navigationController = %@", self.navigationController); 放在你创建 UISearchController 的地方会记录什么? 日志结果:self.navigationController = 【参考方案2】:

你需要用另一个 NavigationController 实例化你的 searchController

    SearchTableViewController *searchView = [[SearchTableViewController alloc]initWithNibName:@"SearchTableViewController" bundle:nil];
    UISearchController *searchController = [[UISearchController alloc]initWithSearchResultsController:searchView];
    [searchController setDefinesPresentationContext:YES];
    searchController.delegate = searchView;
    searchController.searchResultsUpdater = searchView;
UINavitagionController * navCont = [[UINavigationController alloc]initWithRootViewController: searchController];
    [self presentViewController:navCont animated:YES completion:nil];

【讨论】:

以上是关于如何从 UISearchController 推送 VC的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationBar 上呈现 UISearchController 时推送视图控制器

在导航推送上激活没有动画的 UISearchController

使用 UISearchController 推送的第二个视图控制器在 UINavigationBar 中未收到触摸

如何在没有动画的情况下将 UISearchController 设置为活动?

如何从 searchResultsController (UISearchController) 更新数据

使用 UISearchController 进行 segue 的不同行为