工作表中不可编辑的NSTextField

时间:2017-06-14 19:05:39

标签: swift cocoa

我在工作表中有一个NSTextField,但它不可编辑。

这个错误似乎在Cocoa中已知,请参阅:can't edit NSTextField in sheet at runtime

但我正在寻找纯Swift的解决方案。我试过这个:

extension NSWindow {
    override var canBecomeKey:Bool {
        get {
            return true;
        }
    }
}

但似乎我们无法覆盖类属性。然后我尝试设置一个标题到窗口,或者在工作表主ViewController的viewDidAppear函数上调用makeKey()和becomeKey(),设置标题和标题可见性也没有帮助......

编辑:以下是我用于创建工作表的代码:

@IBAction func addDataSourceAction(_ sender: Any) {
    let sheetController = NSStoryboard.init(name: "MyStoryboard", bundle: nil).instantiateController(withIdentifier: "MyPageController") as! NSPageController
    presentViewControllerAsSheet(sheetController)
}

1 个答案:

答案 0 :(得分:0)

假设您使用的是macOS 10.10+,则不需要NSWindow来创建工作表。 只需创建一个NSViewController子类,使用Interface Builder设计附带的视图,然后从单独的视图控制器中显示工作表:

// MainViewController.swift
@IBAction func showSheet(_ sender: Any) {
    let sheetController = SheetViewController() // Assumes there's a SheetViewController.xib file
    presentViewControllerAsSheet(sheetController)
} 

如果您想摆脱工作表,只需解雇

// SheetViewController.swift
@IBAction func endSheet(_ sender: Any) {
    guard let _ = presenting else { fatalError("No presenting controller!") }
    presenting!.dismissViewController(self)
}