ios 如何从单视图 Segue 到拆分视图控制器

Posted

技术标签:

【中文标题】ios 如何从单视图 Segue 到拆分视图控制器【英文标题】:ios How To Segue From Single View To Split View Controller 【发布时间】:2013-11-29 12:05:01 【问题描述】:

我有两个模板视图(一个是单个视图,另一个是拆分视图控制器)每个都可以正常工作。所以我在 Single View 上放了一个按钮,并在按钮上放了一个 Push Segue 以转到 Split View Controller。当我按下按钮时,我得到一个提示无法从外部 UI 导航控制器使用 Push 的崩溃。

好的,所以我将单个视图模板放入 UI 导航控制器,它现在显示:Split View Controllers cannot be push to a Navigation Controller。

那么……我该怎么做呢??

谢谢!

【问题讨论】:

【参考方案1】:

在普通视图控制器中使用容器视图,覆盖整个视图区域,并且该容器视图具有对拆分视图控制器的嵌入 segue

如果需要在它们之间进行通信,请覆盖 UISplitViewController 并将其放在 viewDidLoad 中:

YourLeftVC *masterViewController = (YourLeftVC *) [[self.viewControllers objectAtIndex:0] topViewController];
YourRightVC *detailViewController = [self.viewControllers objectAtIndex:1];

masterViewController.delegate = detailViewController;

【讨论】:

有趣的想法,只是尝试在测试项目中实现它。好像行得通! 如果你能帮我更多的忙! :(【参考方案2】:

尝试设置为rootviewcontroller,而不是呈现splitviewcontroller。

self.view.window.rootViewController = splitViewController;

【讨论】:

你会用动画让它看起来像模态转场吗?【参考方案3】:

根据苹果文档https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/SplitViewControllers.html

拆分视图控制器必须始终是您创建的任何界面的根。 您必须始终将 UISplitViewController 对象中的视图安装为应用程序窗口的根视图。

您可以在此处创建自定义拆分视图。

【讨论】:

那些文档已经过时了。在 UISplitViewController 的文档中:“您不能将拆分视图控制器推送到导航堆栈上。虽然可以在其他一些容器视图控制器中将拆分视图控制器作为子项安装,但在大多数情况下不建议这样做。拆分视图控制器通常是安装在应用窗口的根目录下。有关如何实现界面的提示和指导,请参阅 iOS 人机界面指南。"【参考方案4】:

在最坏的情况下,您可以创建第二个 UIViewController 来进行推送,并在其上创建一个以 UISplitViewController 为根的容器。

【讨论】:

您能详细说明一下吗? 导航将是一个 UIViewController 推送到另一个 UIViewController,但在第二个你需要用 UIContainerView 填充它。 UIContainerView 然后需要嵌入一个 UISplitViewController。我会放一张图片来清除图片,我说这是最坏的情况,因为这个解决方案并不是那么简单......link【参考方案5】:

将您的 segue 设置为模态而不是推送,应该这样做。

编辑

实际上这行不通。您可以尝试将您的 splitView 放在另一个故事板中,并在您的 buttonClicked: 方法中将其呈现在代码中:

在 SigleView.m 中:

- (IBAction)buttonClicked:

    SplitViewController *splitVC = [[UIStoryboard storyboardWithName:@"SplitStoryBoard" bundle:nil] instantiateViewController];
    [self presentViewController:splitVC animated:YES completion:nil];

EDIT2

之前写的也不行。我真的很想知道你是否可以提供一个 splitViewController(即不让它成为你的 rootViewController)。

但是你可以做一些事情:

将您的 splitView 设置为应用程序的 rootView,在启动时以模态方式显示您的 singleView,并且在您想要关闭它时让 splitView 拥有控制权。与让您的 singleView 呈现 splitView 具有相同的效果。

【讨论】:

没有,这些都行不通。出于某种原因,IOS 不喜欢从单视图 UI 控制器转到 SplitView。 它说错误是“应用程序试图以模态方式呈现拆分视图控制器” 这会产生“应用程序试图以模态方式呈现拆分视图控制器”错误 再次编辑,您可以将splitView设置为rootView并在其上呈现/关闭singleView @shinyuX,你是如何让控制器显示在初始视图上的?

以上是关于ios 如何从单视图 Segue 到拆分视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

拆分视图控制器 segue 和连接

在 iOS 拆分视图控制器上推送新的视图控制器

如何在视图控制器之间传递数据而不在 ios 中使用 segue?

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

iOS如何获取对带有segue的storyboard容器中嵌入的视图控制器的引用?

iOS 5 拆分视图模式视图控制器弹出窗口:可能还是没有骰子?