工作表中不可编辑的NSTextField
问题描述:
我在工作表中有一个NSTextField,它不可编辑。工作表中不可编辑的NSTextField
此错误似乎可可知,请参见:can't edit NSTextField in sheet at runtime
但是我正在寻找在纯斯威夫特的解决方案。我试过这个:
extension NSWindow {
override var canBecomeKey:Bool {
get {
return true;
}
}
}
但是好像我们不能重写类属性。然后我试图标题设置为窗口,或片主体视图控制器的viewDidAppear功能的调用makeKey()和becomeKey(),设置标题和标题的知名度没有任何帮助......
编辑:这里的代码我使用用于创建表:
@IBAction func addDataSourceAction(_ sender: Any) {
let sheetController = NSStoryboard.init(name: "MyStoryboard", bundle: nil).instantiateController(withIdentifier: "MyPageController") as! NSPageController
presentViewControllerAsSheet(sheetController)
}
答
假设你正在使用的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)
}
+0
我没有使用XIB文件,但它看起来与我正在做的相似。但我的问题是,在控制器中的NSTextField在工作表中显示时不可编辑。 –
我不熟悉这个问题,但在被引用的线程中,它说你应该*子类* NSWindow,没有定义扩展(它也适用于Swift,根据这个评论:https:// stackoverflow的.com /问题/ 7561347 /倾斜 - 编辑的NSTextField-在片材在运行时·C omment46992411_12363406) –
是的你是对的,在另一个线程中使用扩展方法(在Obj-C中)。因为我不知道如何通过NSViewController.presentViewControllerAsSheet(...)创建子类NSWindow。 –
你使用故事板,xibs还是混合物? –