Cocoa:根据来自 App Delegate 的输入加载不同的视图控制器
Posted
技术标签:
【中文标题】Cocoa:根据来自 App Delegate 的输入加载不同的视图控制器【英文标题】:Cocoa: Load Different View Controllers depending on input from App Delegate 【发布时间】:2016-04-04 13:02:58 【问题描述】:我正在尝试通过 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
【问题讨论】:
为什么不在主窗口上创建两个按钮,每个按钮都连接到各自的视图控制器? 【参考方案1】:不必保留提供窗口内容的默认 segue。如果您删除它并提供两个可以通过 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
【讨论】:
菲利普米尔斯 - 谢谢你 - 但如果我这样做 - 我将如何从这些控制器调用控制器......使用segues? 据我所知,与您在任何其他情况下的情况相同。我刚刚从我的第二个控制器上的一个按钮连接了情节提要中的一个 segue,以将第三个控制器显示为一张表,它工作正常。以上是关于Cocoa:根据来自 App Delegate 的输入加载不同的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
BlocksKit初见:一个支持将delegate转换成block的Cocoa库