NSPopUpButton неактивен на игровой площадке Swift - PullRequest
0 голосов
/ 23 февраля 2019

В контроллере вида на игровую площадку Swift у меня есть следующий код:

var jsonSelector = NSPopUpButton(title: "Path", target: self, action: #selector(updatePointFile))

override public func loadView() {
    let frame = CGRect(origin: CGPoint.zero, size: CGSize(width: 900, height: 600))
    let view = NSView(frame: frame)

    let array = // gets array of items
    for item in array {
        jsonSelector.addItem(withTitle: item)
    }

    view.addSubview(jsonSelector)
    self.view = view
}

@objc func updatePointFile() {
    let file = jsonSelector.selectedItem?.title ?? "swiftLogo"
    ...
}

Когда он работает, он изначально выглядит нормально:
normal

Но затем, когда на него нажимаютэто выглядит так:
broken

А когда вы щелкаете по нему, он остается не щелкаемым:
still broken

Когда я копирую тот же самый код в полное приложение Mac,работает как обычно, и чтобы сделать вещи еще более странными, однажды, когда я делал эти скриншоты, он работал один раз для выделения и возвращался в серое состояние.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 февраля 2019

Так что решение этого довольно странное.Это просто требует определения цели позже.

Это означает, что

var jsonSelector = NSPopUpButton(frame: NSRect(origin: CGPoint.zero, size: CGSize(width: 100, height: 50)))

override public func loadView() {
    jsonSelector.target = self
        jsonSelector.action = #selector(updatePointFile)

    let array = // gets array of items
    for item in array {
        jsonSelector.addItem(withTitle: item)
    }

    view.addSubview(jsonSelector)
    self.view = view
}

@objc func updatePointFile() {
    let file = jsonSelector.selectedItem?.title ?? "swiftLogo"
    ...
}

или

var jsonSelector = NSPopUpButton(title: "Path", target: self, action: #selector(updatePointFile))

override public func loadView() {
    let frame = CGRect(origin: CGPoint.zero, size: CGSize(width: 900, height: 600))
    let view = NSView(frame: frame)

    jsonSelector.target = self

    let array = // gets array of items
    for item in array {
        jsonSelector.addItem(withTitle: item)
    }

    view.addSubview(jsonSelector)
    self.view = view
}

@objc func updatePointFile() {
    let file = jsonSelector.selectedItem?.title ?? "swiftLogo"
    ...
}

работает

...