小编DB1*_*DB1的帖子

如何在OSX Mavericks上呈现ViewControllerAsSheet?

这是一个很长的故事,但要缩短它; 我的第一个OSX应用程序是在Swift中使用故事板编写的(在Yosemite上)直到我发现我的(已完成)应用程序不会在Mavericks上运行.我需要在Mavericks上运行,所以我用NIB替换了故事板.

我的问题是与segues; 我正在使用'sheet type'segues在主视图控制器上显示工作表中的其他视图控制器.调用NSViewController的presentViewControllerAsSheet方法是一个很好的替代,因为它看起来一样,但是这个API是在Yosemite中引入的 - 所以我需要弄清楚如何为Mavericks做这个.

在主视图上的按钮操作中,我尝试使用beginSheet,如下所示:

secondViewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
self.view.window?.beginSheet(secondViewController!view.window!, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)

但是第二个视图控制器的窗口在运行时为空.我已经尝试将新视图控制器作为子视图添加到应用程序窗口,但这是一个无法识别的选择器:

NSApplication.sharedApplication().windows[0].addSubView(secondViewController!.view)
Run Code Online (Sandbox Code Playgroud)

我搜索高低,以获取如何显示工作表的说明,我能找到的是:视图控制器可以拥有一张工作表吗?但我很遗憾地承认我不明白答案.有人可以帮我一些工作代码吗?我开始担心我正在尝试做一些与众不同的事情,但在约塞米蒂看起来不错,所以人们在优胜美地被释放之前是怎么做到的?

编辑 我仍然没有解决方案,所以我已经整理了一个小应用程序,显示我遇到的问题.

在AppDelegate.swift中:

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    var mainViewController: FirstView!   
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        mainViewController = FirstView(nibName:"FirstView", bundle: nil)
        window.contentView = mainViewController.view
        mainViewController.view.frame = (window.contentView as! NSView).bounds
    }
}
Run Code Online (Sandbox Code Playgroud)

在FirstView.swift中(关联的NIB有一个'打开表'按钮)

class FirstView: NSViewController {
    var secondView: SecondView?
    var secondWindow: SecondWinCon?    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func pressButton(sender: AnyObject) {
        secondView …
Run Code Online (Sandbox Code Playgroud)

macos cocoa nsviewcontroller osx-mavericks swift

5
推荐指数
2
解决办法
2087
查看次数

标签 统计

cocoa ×1

macos ×1

nsviewcontroller ×1

osx-mavericks ×1

swift ×1