SplitViewController无法正常工作(Swift)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SplitViewController无法正常工作(Swift)相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个支持SplitViewController的应用程序。

但是我的应用程序在启动时崩溃了。

我怎样才能解决这个问题?

MenuViewController - > ViewController - > DetailViewController

AppDelegate.swift

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if UIDevice.current.userInterfaceIdiom == .pad {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window!.backgroundColor = UIColor.white
        let splitViewController =  UISplitViewController()
        let menuViewController = MenuViewController()
        let homeViewController = ViewController()
        let secondViewController = DetailViewController()
        let menuNavigationController = UINavigationController(rootViewController:menuViewController)
        let homeNavigationController = UINavigationController(rootViewController:homeViewController)
        let secondNavigationController = UINavigationController(rootViewController:secondViewController)
        splitViewController.viewControllers = [menuNavigationController,homeNavigationController,secondNavigationController]
        self.window!.rootViewController = splitViewController
        self.window!.makeKeyAndVisible()
        return true
    } else {
    }
    return true
}

错误:(示例) - MenuViewController

    override func viewDidLoad() {
    super.viewDidLoad()
    let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")
    if isDarkMode == true {
        self.tableView.backgroundColor = UIColor(red: 37/255, green: 38/255, blue: 39/255, alpha: 1)
    } else {
        self.tableView.backgroundColor = UIColor(red: 245/255, green: 245/255, blue: 245/255, alpha: 1)
    }
    tableView.tableFooterView = UIView(frame: CGRect.zero)

我的故事板:

答案

您的问题是您使用故事板设计视图控制器,但是您可以在代码中创建它们,同时有效地绕过故事板。发生这种特殊错误是因为创建tableView是故事板的责任,但现在因为你绕过故事板,它是nil

您有两种选择:

  1. 在故事板中创建splitViewController并将其用作应用程序的初始视图控制器(并在appDelegate中删除splitViewController的程序化创建)。
  2. 从故事板中获取那些视图控制器,例如: let menuViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "menuController") 在这里我假设故事板名称是"Main",并且你设置MenuViewController的故事板标识符设置为"menuController" - 小心,viewController的类(MenuViewController)与viewController的storyboard标识符不同(在我的情况下我使用' “menuController”'):

enter image description here

对于您在故事板中创建的所有视图控制器执行相同的操作。

以上是关于SplitViewController无法正常工作(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

Ipad SplitViewController 导航到另一个视图

使用 splitViewController 在 iPad 故事板上出现黑屏

SplitViewController detailViewComtroller 的 NavigationBar 颜色变为粉灰色

iPad:在 RootView 中合并 SplitViewController 和 NavigationController 的概念?

UIViewController 上的自定义属性,如 splitViewController 或 tabBarController

UISplitView 方向问题