如何从 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 = 你需要用另一个 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 设置为活动?