Действие StatusItem не работает в Swift - PullRequest
0 голосов
/ 13 сентября 2018

Итак, я новичок в Swift и хотел создать простое приложение-пример строки состояния в MacOS. Чтобы сохранить вещи в чистоте, я создал приложение подкласса, которое создает элемент состояния. Этот класс затем создается в функции applicationDidFinishLaunching в AppDelegate.swift.

Но как-то ничего не печатается на консоли, когда я нажимаю значок состояния. Однако, если я копирую код в файл AppDelegate, он работает. Кто-то знает, что я делаю неправильно и почему он не работает в подклассе?

Вот код моего собственного класса:

import Cocoa

class App: NSObject {

    let menuBarItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)

    override init() {
        print("created app instance");

        if let button = menuBarItem.button {
            button.image = NSImage(named: NSImage.Name("StatusBarButtonImage"))
            button.action = #selector(test(_:))
        }
    }

    @objc func test(_ sender: Any?) {
        print("button was pressed")
    }
}

и AppDelegate:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var appInstance: App!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        appInstance = App()
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }
}

1 Ответ

0 голосов
/ 14 сентября 2018

Если кнопка появляется и ничего не происходит, когда вы нажимаете на нее, мне кажется, что вам нужно убедиться, что вы устанавливаете target своей кнопки на свой экземпляр App.Например:

button.target = self

В противном случае действие выполняется только по цепочке респондента.

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