Swift:通用应用程序上的拆分视图控制器不是初始视图控制器

Swift: Split view controller on universal app that isnt initial view controller

我有一个通用应用程序,想为我的设置视图添加一个拆分视图控制器。这意味着我需要一个拆分视图控制器,它不是初始视图控制器,它将处理 SettingMainTableViewController(主设置页面)和 SettingDetailViewController(显示各个设置)之间的交互。我在网上看到的所有指南和教程都假定拆分视图控制器是初始视图控制器。

流程将是 MainMenuViewController -> SettingMainTableViewController -> SettingDetailViewController,如果在 ipad 上将显示为拆分,如果 iphone 则不会拆分。这有可能实现吗?我该怎么做?

无需将其设置为rootViewController,您可以像使用其他UIViewController一样使用它。您可以以模态方式呈现,甚至可以将其推送到导航堆栈。其中一个例子如下:

let rootViewController: UIViewController = UIViewController()
rootViewController.view.backgroundColor = UIColor.red
let navVC: UINavigationController = UINavigationController(rootViewController: rootViewController)

let detailViewController: UIViewController = UIViewController()
detailViewController.view.backgroundColor = UIColor.blue

let splitVC: UISplitViewController = UISplitViewController()
splitVC.viewControllers = [navVC, detailViewController]
self.present(splitVC, animated: true, completion: nil)

如有任何疑问,请告诉我

我更喜欢的技术是使用 "container view controller"(google 它)作为根视图控制器。该视图控制器在您的普通应用程序视图控制器层次结构和设置拆分视图控制器之间转换。您可以使用多种过渡从一种过渡到另一种。这个解决方案的一个很好的特性是,当它 运行 时,你只为设置分配内存 - 一旦关闭,就可以释放该视图控制器。

编辑:您有一个根容器视图。在启动时,您只需立即显示视图 A (VC-A)。稍后,您决定显示视图 B (VC-B)。你创建一个转换,从 A 到 B,然后在最后,你释放视图控制器 VC-A。 Matt Neuburg 在他的 iOS 书中得到了很好的处理 - 这就是我从中获得技术的地方。当然,这也包括在其他地方。有趣的是,根容器视图还可以在其视图中显示一些 UI!确实有点复杂,但我已经做到了。