如何在 swift 中启动时加载详细视图控制器(从拆分视图)?
How to load a detailed view controller (from split view) on start up in swift?
当我的应用程序首次在 iPad 模拟器上启动时,mainVC table 从我的模型中加载并列出数据,但详细视图控制器不会。它只加载和列出故事板中的数据。我希望它列出主菜单中的第一项(例如)。
我在 RayW 教程中看到这是通过 AppDelegate 方法 didFinishLaunchingWithOptions 完成的,但他们没有使用默认的拆分视图代码,而是使用默认代码的一些变体从头开始重新创建它。他们是这样做的:
let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MasterViewController
let detailViewController = splitViewController.viewControllers.last as! DetailViewController
let firstMonster = masterViewController.monsters.first
detailViewController.monster = firstMonster
return true
以下是默认代码加上(在空行之后)尝试将默认代码与上述方法协调。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let splitViewController = self.window!.rootViewController as! UISplitViewController
let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
splitViewController.delegate = self
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MasterViewController
let detailViewController = navigationController.topViewController as! DetailViewController
let firstRecord = masterViewController.records.first
detailViewController.record = firstRecord
return true
}
在我最初的尝试中,我绕过了错误的控制器,但上面的代码至少可以编译和运行,但它不会将第一条记录加载到 detailVC 中。
这是正确的方法吗,我只是遗漏了一些东西,或者有其他方法可以做到这一点吗?
更简单的方法是在 MasterView Controller 的 viewDidLoad 方法中实例化细节:
override func viewDidLoad()
{
super.viewDidLoad()
startingDetailedVCData = theData
if let split = self.splitViewController {
let controllers = split.viewControllers
self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
self.detailViewController?.detailedData = startingDetailedVCData
}
}
当我的应用程序首次在 iPad 模拟器上启动时,mainVC table 从我的模型中加载并列出数据,但详细视图控制器不会。它只加载和列出故事板中的数据。我希望它列出主菜单中的第一项(例如)。
我在 RayW 教程中看到这是通过 AppDelegate 方法 didFinishLaunchingWithOptions 完成的,但他们没有使用默认的拆分视图代码,而是使用默认代码的一些变体从头开始重新创建它。他们是这样做的:
let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MasterViewController
let detailViewController = splitViewController.viewControllers.last as! DetailViewController
let firstMonster = masterViewController.monsters.first
detailViewController.monster = firstMonster
return true
以下是默认代码加上(在空行之后)尝试将默认代码与上述方法协调。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let splitViewController = self.window!.rootViewController as! UISplitViewController
let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
splitViewController.delegate = self
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let masterViewController = leftNavController.topViewController as! MasterViewController
let detailViewController = navigationController.topViewController as! DetailViewController
let firstRecord = masterViewController.records.first
detailViewController.record = firstRecord
return true
}
在我最初的尝试中,我绕过了错误的控制器,但上面的代码至少可以编译和运行,但它不会将第一条记录加载到 detailVC 中。
这是正确的方法吗,我只是遗漏了一些东西,或者有其他方法可以做到这一点吗?
更简单的方法是在 MasterView Controller 的 viewDidLoad 方法中实例化细节:
override func viewDidLoad()
{
super.viewDidLoad()
startingDetailedVCData = theData
if let split = self.splitViewController {
let controllers = split.viewControllers
self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
self.detailViewController?.detailedData = startingDetailedVCData
}
}