工作表中不可编辑的NSTextField

工作表中不可编辑的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) 
} 
+0

我不熟悉这个问题,但在被引用的线程中,它说你应该*子类* NSWindow,没有定义扩展(它也适用于Swift,根据这个评论:https:// stackoverflow的.com /问题/ 7561347 /倾斜 - 编辑的NSTextField-在片材在运行时·C omment46992411_12363406) –

+0

是的你是对的,在另一个线程中使用扩展方法(在Obj-C中)。因为我不知道如何通过NSViewController.presentViewControllerAsSheet(...)创建子类NSWindow。 –

+0

你使用故事板,xibs还是混合物? –

假设你正在使用的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在工作表中显示时不可编辑。 –