Cocoa:根据 App Delegate 的输入加载不同的视图控制器
Cocoa: Load Different View Controllers depending on input from App Delegate
我正在尝试通过 AppDelegate 触发 2 个不同流程中的 1 个,但似乎很难。
见下图:
如果只有一个可以绑定到主 NSWindow 控制器,我该如何分别实例化这两个不同的视图控制器?
我设法使用 "addChildWindow" 使用以下代码触发它们 - 但是我无法继续到任何后续视图控制器。
这是我用来实例化视图控制器的代码:
if let pboardString = pboard.stringForType(NSStringPboardType){
print(pboardString)
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let destcontroller = storyboard.instantiateControllerWithIdentifier("pickProject") as! WizardTextFromPasteboardVC
destcontroller.weburlFromPaste = pboardString
let numWindows = NSApplication.sharedApplication().windows
if let window = NSApplication.sharedApplication().mainWindow {
if numWindows.count >= 1{
let childWindow = NSWindow(contentViewController: destcontroller)
window.addChildWindow(childWindow, ordered: .Above)
}
else if numWindows.count == 0 {
window.contentViewController = destcontroller
}
没有必要保留提供 window 内容的默认转场。如果你删除它并提供两个可以通过 id 实例化的视图控制器,那么你的应用程序委托可以决定何时启动完成。
如:
let selection: Int = 2
func applicationDidFinishLaunching(aNotification: NSNotification) {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
var controller: NSViewController
if selection == 1 {
controller = storyboard.instantiateControllerWithIdentifier("view_controller") as! NSViewController
} else {
controller = storyboard.instantiateControllerWithIdentifier("view_controller_2") as! NSViewController
}
let window = NSApp.windows[0]
window.contentViewController = controller
}
我正在尝试通过 AppDelegate 触发 2 个不同流程中的 1 个,但似乎很难。
见下图:
我设法使用 "addChildWindow" 使用以下代码触发它们 - 但是我无法继续到任何后续视图控制器。
这是我用来实例化视图控制器的代码:
if let pboardString = pboard.stringForType(NSStringPboardType){
print(pboardString)
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let destcontroller = storyboard.instantiateControllerWithIdentifier("pickProject") as! WizardTextFromPasteboardVC
destcontroller.weburlFromPaste = pboardString
let numWindows = NSApplication.sharedApplication().windows
if let window = NSApplication.sharedApplication().mainWindow {
if numWindows.count >= 1{
let childWindow = NSWindow(contentViewController: destcontroller)
window.addChildWindow(childWindow, ordered: .Above)
}
else if numWindows.count == 0 {
window.contentViewController = destcontroller
}
没有必要保留提供 window 内容的默认转场。如果你删除它并提供两个可以通过 id 实例化的视图控制器,那么你的应用程序委托可以决定何时启动完成。
如:
let selection: Int = 2
func applicationDidFinishLaunching(aNotification: NSNotification) {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
var controller: NSViewController
if selection == 1 {
controller = storyboard.instantiateControllerWithIdentifier("view_controller") as! NSViewController
} else {
controller = storyboard.instantiateControllerWithIdentifier("view_controller_2") as! NSViewController
}
let window = NSApp.windows[0]
window.contentViewController = controller
}