从 popover segue 推送 segue 不起作用

Posted

技术标签:

【中文标题】从 popover segue 推送 segue 不起作用【英文标题】:Push segue from popover segue does not work 【发布时间】:2017-09-21 11:07:58 【问题描述】:

我有一个 tableViewController,它作为弹出窗口连接到另一个 tableViewController,它运行良好。但是当我尝试从第二个 tableViewController 到第三个 tableViewController 的显示(例如推送)时,它不起作用,因为第三个 tableViewController 从下到上滑动,而不是从右到左滑动,所以它正在作为弹出窗口。

我看到在日历应用程序中实现了这一点,创建新事件是弹出框转场(从下到上滑动),旅行时间单元格从右到左转场,但我似乎不能这样做。

如果答案是代码,如果是 Swift,我将不胜感激

Screenshot of the app layout - img

【问题讨论】:

你的第三个 tableviewcontroller 是否显示在 popover 中? 它显示为弹出框(从下到上),但我希望它从(从右到左)显示 - 在属性检查器中,segue 类型设置为显示(例如推送)。 你应该使用委托来移动第三个viewController。也就是说,当用户点击按钮然后在第一个 viewController 中调用委托并推送到第三个视图控制器 我该怎么做?更重要的是,最初设置为 popover 的第一个 segue 仍然显示为 popover,尽管我已将其更改为 push - 任何想法?检查我刚刚包含在我的问题中的屏幕截图 你使用哪个动作推送到第三个视图控制器 【参考方案1】:

您需要确保您的第二个表格视图控制器嵌入在导航控制器中,以便推送转场工作。

否则,如您所见,它将继续使用您的第三个表格视图控制器,但 Xcode 将使用默认值并最终以模态方式呈现您的控制器。

要将您的视图控制器嵌入到它自己的导航控制器中,并选择您的第二个视图控制器,请选择编辑器 > 嵌入 > 导航控制器。就是这样。

更新:感谢您添加屏幕截图,我可以在这里看到一个问题。你不需要第三个导航控制器,实际上你不应该添加它,因为这是你的问题的原因。其背后的原因是,Controller 3 会自然地被压入堆栈,因为 Controller 2 已经嵌入到自己的 Navigation Controller 中。为了说明我要解释的内容,这是一个工作示例,向您展示它的外观:

如您所见,Controller 1 嵌入在自己的 Navigation Controller 中,因此它可以拥有自己的 Navigation Bar。 现在,您希望以模态方式呈现您的控制器 2,并且由于您希望控制器 2 也有一个导航栏,那么您也需要嵌入它自己的导航控制器,因为模态 Segue 只是一个视图控制器呈现另一个模态视图控制器,它不会免费为您提供导航栏(在此处了解,在模态 Segue 的情况下,您的控制器 2 不会被添加到堆栈中) 最后,您只需创建一个从控制器 2 到控制器 3 的 Push Segue,控制器 3 就会自然地添加到堆栈中(控制器 2 是导航控制器的根控制器),从而创建您正在寻找的推送转换.

如果您有任何问题,请告诉我,我很乐意为您提供帮助

【讨论】:

我的所有 tableViewController 都嵌入在导航控制器中,但仍然无法正常工作 - 查看我刚刚包含在问题中的屏幕截图。 顺便说一句,我只是将第一个 segue 的类型从 popover 更改为 push,但仍显示为 popover,似乎此应用中的所有 segue 都显示为 popover - 有什么想法吗? 感谢您添加屏幕截图!我会更新我的答案 太棒了!!有效。感谢您解决我的问题并解释发生了什么。 :)

以上是关于从 popover segue 推送 segue 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 Popover 中关闭显示为 Popover segue 的 ViewController

来自 UICollectionView ReusableView (header) 的 Popover segue

为啥这个 popover segue 以 UITableViewController 为中心?

没有锚的popover segue,MKMapView

Segue Popover 无法正常运行

转换为使用 iOS 8 Popover Segues 时 UISplitViewController 崩溃