Как закрыть / закрыть / скрыть меню, нажав на кнопку во встроенном представлении внутри него, в Swift? - PullRequest
0 голосов
/ 04 апреля 2019

Я создал приложение меню, используя 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
}


1 Ответ

0 голосов
/ 04 апреля 2019

Вдохновленный комментарием El Tomato , я нашел решение.

Учитывая тот факт, что plusButtonClicked ограничен его собственным контекстом, который является контроллером, в котором он находится.находится и все публичные переменные, я не могу вызвать метод на CustomMenu из него.Потому что CustomMenu само по себе не является публичным.Но содержащая его переменная statusBarItem.menu общедоступна и доступна из всех других представлений.Поэтому я добавил statusBarItem.menu?.cancelTracking() к plusButtonClicked действию, и оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...