两个视图控制器之间的 Segue

Posted

技术标签:

【中文标题】两个视图控制器之间的 Segue【英文标题】:Segue between two view controllers 【发布时间】:2012-10-24 12:55:56 【问题描述】:

在我的故事板上(如上所示),我有一个 ViewController,它包含一个带有注释的 MKMapView。这些注释包含一个显示图标,当点击它时,应该将用户导航到另一个 ViewController。为此,我在视图控制器之间创建了一个 push 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,但视图随后显示为黑屏。

【问题讨论】:

你能用两个 ViewController 发布你的故事板的截图吗? @Mariusz 问题已更新!谢谢。 尝试将你的目标 ViewController 嵌入到 NavigationController 中,然后将你的 segue 从 MapViewController 拖到 NavigationController。 【参考方案1】:

执行此操作的最简单方法是选择要作为导航层次结构根的视图控制器并选择

Editor > Embed In > Navigation Controller

这将创建新的导航控制器并为您连接所有内容。

【讨论】:

【参考方案2】:

您实际上必须将 UIViewController 设置为 UINavigationController 的根控制器(或从带有导航控制器的视图控制器推送)。这样做

将一个新的导航控制器拖到您的故事板中 - 它会 默认附加到 tableview 控制器 删除tableview控制器右键导航 控制器,并将“根视图控制器”属性连接到您的 现有的视图控制器 将入口点箭头从视图控制器移动到根目录 视图控制器

【讨论】:

有效!谢谢你。只是为了检查我做对了,我现在有一个 TabBarController 和一个 UINavigationController。没有一个控制器可以同时处理这两者吗? 查看此文档:developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/… 步骤位于“使用情节提要创建对象”标题下。【参考方案3】:

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

【讨论】:

以上是关于两个视图控制器之间的 Segue的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如何在通过手动 Segue 链接的两个视图控制器之间传递信息?

创建一个 segue 并通过 Swift 在两个视图控制器之间附加它?

直接在不同的细节视图控制器之间进行segue

在嵌入在两个独立容器控制器中的视图之间实现委托

IOS / Objective-C / Storyboard:从左到右的自定义Segue在视图控制器之间创建黑条

自定义 Segue 在显示目标视图控制器之前动画为黑色