在两个视图控制器之间进行转场

13

在此输入图片描述

在我的故事板中(如上图所示),我有一个包含MKMapView和注释的ViewController。这些注释包含了一个“揭示图标”,当被点击时,应该将用户导航到另一个ViewController。为此,我已经在视图控制器之间创建了一个推送Segue。然后,我给它命名为“showDetail”,并实现了以下代码。

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    [self performSegueWithIdentifier:@"showDetail" sender:self];
}

然而,我遇到了以下错误。

Could not find a navigation controller for segue 'showDetail'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

我做错了什么?我试着把我的源UIViewController更改为UINavigationController,但视图就只显示成黑屏。


你能否发布一个带有两个视图控制器的故事板截图? - Mariusz
@Mariusz问题已更新!谢谢。 - Jonathan
尝试将目标 ViewController 嵌入 NavigationController 中,并从 MapViewController 拖动 segue 到 NavigationController。 - Mariusz
3个回答

40
选择您想要成为导航层次结构根的视图控制器,然后选择最简单的方法是:
Editor > Embed In > Navigation Controller

这将创建新的导航控制器并为您连接一切。


38

你实际上需要将你的UIViewController设置为UINavigationController的根控制器(或从具有导航控制器的视图控制器中推出)。要做到这点:

  • 将一个新的导航控制器拖入你的Storyboard - 它默认会连接到一个tableview控制器
  • 删除tableview控制器,右键点击导航控制器,并将“根视图控制器”属性连接到你现有的视图控制器
  • 将入口箭头从你的视图控制器移动到根视图控制器

可以了!谢谢。只是为了确认我做对了,现在我有一个TabBarController和一个UINavigationController。难道没有一个控制器可以同时处理两者吗? - Jonathan
请查看此文档:http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html#//apple_ref/doc/uid/TP40011313-CH6-SW1 。 步骤位于标题下方:“使用故事板创建对象”。 - Edwin Iskandar

0
请按照以下步骤操作: 1. 点击两个视图控制器之间的连接。 2. 点击属性检查器。 3. 将标识符设置为“showDetail”。 4. 保存并运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接