从 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];

您需要提供处理tableViewControllerUINavigationController。因此,您需要将故事板中的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 我编辑了我的解决方案。该属性应该是包含tableViewControllerUINavigationController 要创建一个插座,我需要创建自己的类,该类派生自 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

在显示另一个视图控制器的同时从一个视图控制器调用该方法

添加注释以从另一个视图映射

从单独的控制器文件控制 .xib 中的按钮

Swift - 如何从 mapViewkit 中的 API 数据创建要使用的局部变量

mapView:regionDidChangeAnimated: 从未调用