SplitViewController 不工作 (Swift)
SplitViewController not work (Swift)
我正在尝试制作支持拆分的应用程序ViewController。
但是我的应用程序在启动时崩溃了。
我该如何解决这个问题?
菜单ViewController --> ViewController --> 详细信息ViewController
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
}
错误:(示例)- 菜单ViewController
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
.
您有两个选择:
在故事板中创建 splitViewController
并将其用作应用程序的初始视图控制器(并在 appDelegate 中删除 splitViewController 的编程创建)。
从情节提要中获取那些视图控制器,例如:
let menuViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "menuController")
在此我假设故事板名称是 "Main"
,并且您将 MenuViewController
的故事板标识符设置为 "menuController"
- 注意,viewController 的 class (MenuViewController
) 与 viewController 的故事板标识符不同(在我的例子中我使用了 '"menuController"'):
对您在情节提要中创建的所有视图控制器执行相同的操作。
我正在尝试制作支持拆分的应用程序ViewController。
但是我的应用程序在启动时崩溃了。
我该如何解决这个问题?
菜单ViewController --> ViewController --> 详细信息ViewController
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
}
错误:(示例)- 菜单ViewController
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
.
您有两个选择:
在故事板中创建
splitViewController
并将其用作应用程序的初始视图控制器(并在 appDelegate 中删除 splitViewController 的编程创建)。从情节提要中获取那些视图控制器,例如:
let menuViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "menuController")
在此我假设故事板名称是
"Main"
,并且您将MenuViewController
的故事板标识符设置为"menuController"
- 注意,viewController 的 class (MenuViewController
) 与 viewController 的故事板标识符不同(在我的例子中我使用了 '"menuController"'):
对您在情节提要中创建的所有视图控制器执行相同的操作。