如何在 Swift 中通过单击嵌入式视图中的按钮来关闭/关闭/隐藏菜单



我使用 Swift 为 Mac OS 创建了一个菜单应用程序,其中自定义视图是唯一的菜单项。此自定义视图上有一个加号按钮,用于打开一个包含文本字段的窗口。

当我单击加号按钮时,窗口出现,但菜单不会消失。文本字段也没有焦点。当我键入一个字母时,该字母不会显示在文本字段中,但菜单消失,并且文本字段已聚焦并准备好接收条目。

我想让自定义视图或菜单消失,并在单击加号按钮时(而不是在按额外的键(时准备好接收击键的文本字段。

我怎样才能做到这一点?我做错了什么?

这是我的代码:


// CustomView.swift
    var customWindow: CustomWindow!
    override func awakeFromNib() {
        customWindow = CustomWindow()
    }
    @IBAction func plusButtonClicked(_ sender: NSButton) {
        customWindow.showWindow(nil)
}

// CustomWindow.swift
    override var windowNibName : NSNib.Name? {
        return NSNib.Name("CustomWindow")
    }

    override func windowDidLoad() {
        super.windowDidLoad()
        self.window?.center()
        self.window?.makeKeyAndOrderFront(self)
        self.window?.level = .mainMenu + 100
        NSApp.activate(ignoringOtherApps: true)
        if customTextField.acceptsFirstResponder {
            customTextField.window?.makeFirstResponder(customTextField)
        }

// CustomMenuContoller.swift
let statusBarItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)

    @IBOutlet weak var CustomMenu: NSMenu!
    @IBOutlet weak var customView: CustomView!
    var customMenuItem: NSMenuItem!
    override func awakeFromNib() {
        customMenuItem = CustomMenu.item(withTitle: "TheMenu")
        customMenuItem.view = customView
        statusBarItem.menu = CustomMenu
}

受到El Tomato评论的启发,我找到了解决方案。

鉴于plusButtonClicked仅限于其自己的上下文,即它所在的控制器和所有公共变量,我无法从中调用CustomMenu方法。因为CustomMenu本身不是公开的。但是它包含变量statusBarItem.menu ,是公共的,可以从所有其他视图访问。所以我在plusButtonClicked动作中添加了statusBarItem.menu?.cancelTracking(),它有效。

最新更新