我在工作表中有一个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)
}
答案 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)
}