从 MapViewController 调用 UINavigationController
Posted
技术标签:
【中文标题】从 MapViewController 调用 UINavigationController【英文标题】:calling a UINavigationController from a MapViewController 【发布时间】:2013-06-05 23:10:54 【问题描述】:我有一个 MapViewController,一个 UINavigatioController,它封装了一个 UITableViewController,它与一个 UIViewController 保持一致,都放在 storyboard 中。在地图上我有一个按钮点击它我希望调用 UITableViewController 并能够打开 UIViewController。
如果我打电话
[self presentViewController:self.tableViewController animated:NO completion:nil];
显示了 TableViewController,但是当单击披露指示器时抛出异常:
“找不到 segue 'showApartmentDetails' 的导航控制器。只有当源控制器由 UINavigationController 的实例管理时,才能使用推送 segue。”
创建 UINavigationController 类型的属性并使用初始化它
self.navigationController = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"];
[self.navigationController pushViewController:self.tableViewController animated:NO];
什么都不做!
请告诉我如何调用导航器?
【问题讨论】:
【参考方案1】:问题是因为
[self presentViewController:self.tableViewController animated:NO completion:nil];
您需要提供处理tableViewController
的UINavigationController
。因此,您需要将故事板中的UINavigationController
链接到MapViewController
中名为UINavigationController *tableViewNavigationController
的出口。
[self presentViewController:self.tableViewNavigationController animated:NO completion:nil];
或者只是从MapViewController
中的按钮添加一个模态segue 到情节提要中的UINavigationController
。
【讨论】:
什么意思 tableViewNavigationController 是什么类型的属性? self 是 mapviewcontroller 它没有 presentViewController 接口No visible @interface for 'MapViewController' declares the selector 'pushViewController:animated:
@liva 我编辑了我的解决方案。该属性应该是包含tableViewController
的UINavigationController
。
要创建一个插座,我需要创建自己的类,该类派生自 UINavigationController 什么都不做,而是使用此 self.navigationController = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"];
获取实例
不,您不需要创建新的子类。 顺便说一句从按钮到UINavigationController
的转接要简单得多。
self.navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"myNavigationController"];
将不起作用,因为为了从视图控制器 A 推送另一个视图控制器 B,A 必须已经管理和呈现 通过UINavigationController
。所以这个UINavigationController
是真正推动B 的那个。上面提到的行代码什么都不做。以上是关于从 MapViewController 调用 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章
未调用 UITableViewDelegate cellForRowAtIndexPath