使用NSPanel进行用户输入。不再开放

时间:2016-04-20 11:39:26

标签: swift swift2 nswindowcontroller nspanel

我想要显示一个NSPanel'供用户输入新文件夹的名称。为什么选择NSPanel?因为它看起来很棒!它托管一个TextField和一个PushButton来确认名称。单击时也应关闭窗口。

enter image description here

当"添加"按钮在我的菜单中被点击。当"完成"它也会关闭。按钮在NSPanel中被点击。但是当我点击"添加"它再也不会出现了。当我通过正常的"关闭按钮关闭它时也会发生这种情况。在标题栏中。所以它并没有与" done" -PushButton明确相关。我还测试了实现func windowWillClose(notification: NSNotification),在任何一种情况下也都没有触发。可能是什么问题呢?此外,它是否需要成为一个新的"窗口每次?或者我是否正确使用此用户输入?我的意思是它只是被实例化一次然后"显示"并且"未示出"或者我错了吗?

所以我做了一个新的Cocoa-Class - NSWindowController的子类 - 让xCode为它创建一个.xib。在那个.xib I"设计" NSPanel。我勾选了visible at launch,但没有在单击菜单按钮时窗口不会出现。我还在我的Cocoa Class中为IBOutlet连接NSPanel。我的课程目前看起来像这样:

import Cocoa

class NamingHUD: NSWindowController, NSWindowDelegate {
    @IBOutlet var insertNameWindow: NSPanel!
    @IBOutlet weak var nameTextField: NSTextField!
    override var windowNibName : String! {
        return "NamingHUD"
    }
    override func windowDidLoad() {
        super.windowDidLoad()

        insertNameWindow.center()
        insertNameWindow.makeKeyAndOrderFront(nil)
        NSApp.activateIgnoringOtherApps(true)
    }
    @IBAction func userSetName(sender: NSButton) {
        print("Close button clicked")
        insertNameWindow.close()
    }
}

在我的主类中,我将它声明为这样的变量:

var namingHUD:NamingHUD!

然后在override func awakeFromNib()中:

namingHUD = NamingHUD()

以及点击处理程序,如:

 @IBAction func addClicked(sender: NSMenuItem) {
        namingHUD.showWindow(nil)
    }

现在。当我点击并addClicked()被调用时,窗口会按预期显示。精细!我输入一个名字然后点击"完成"按钮,它正确关闭窗口。还好!但是当我再次点击,说要添加另一个文件夹时,窗口就不再显示了。我也以完全相同的方式创建了一个首选项窗口。但是使用Window而不是NSPanel。这完全有效。

所以我明显感到困惑或遗忘了什么。会是什么呢?我公开承认这是我第一次使用任何类型的窗口,而不是遵循教程。所以我显然没有掌握它的整个概念。我在Apples开发人员指南中读到了关于windows的内容,这有点道理。但是......好吧,目前还没有工作。我是否会误用" NSPanel?不应该是这种情况,因为它继承自NSWindow或?

1 个答案:

答案 0 :(得分:1)

您是否已将window NamingHUD插座连接到您真棒的面板上? Nibs懒洋洋地加载:

namingHUD = NamingHUD()   // init the controller but doesn't load the nib
...
namingHUD.showWindow(nil) // now you are loading it for the first time

它首次运行,因为showWindow()加载了笔尖显示了window插座引用的窗口。您的面板会显示,因为它已设置为"在启动时可见"。你当然没有窗口可以展示。

后续点击不会再次加载nib文件,只能命令window出口显示。这就是为什么你的小组没有再次展示的原因。仅供参考:NSPanelNSWindow的子类,因此它包含NSWindow所拥有的所有内容,然后是其他内容。