Попытка привязать свойство `` `enabled``` NSPopupButton к состоянию флажка - PullRequest
0 голосов
/ 10 июля 2019

Используя привязки какао, я хочу, чтобы всплывающая кнопка была включена или отключена в зависимости от того, установлен флажок или нет.

Я программно добавляю чекбоксы и всплывающие окна в представление стека следующим образом:

  private func addCheckBoxes() {
        for period in String.BuildTimePeriod.allCases {
            let checkbox = NSButton(checkboxWithTitle: period.rawValue.capitalized, target: self, action: nil)
            checkbox.bind(.value, to: NSUserDefaultsController.shared, withKeyPath: "values.\(period.defaultsBoolKey.rawValue)", options: [NSBindingOption.continuouslyUpdatesValue: true])
            stackView.addArrangedSubview(checkbox)
            addPopUpToCheckbox(checkbox, period: period)
        }
    }

    private func addPopUpToCheckbox(_ checkbox: NSButton, period: String.BuildTimePeriod) {
        let popUp = NSPopUpButton(frame: checkbox.frame, pullsDown: false)
        let timeBlocks = String.TimeBlock.allCases.map() { $0.rawValue.capitalized }
        popUp.addItems(withTitles: timeBlocks)
        popUp.bind(.selectedValue, to: NSUserDefaultsController.shared, withKeyPath: "values.\(period.rawValue)", options: [NSBindingOption.continuouslyUpdatesValue: true])
        popUp.bind(.enabled, to: checkbox, withKeyPath: "state", options: [NSBindingOption.continuouslyUpdatesValue : true])
        stackView.addArrangedSubview(popUp)
    }

Привязка работает при начальной загрузке контроллера, однако состояние включения всплывающих окон не изменяется динамически. Хотите знать, если кто-нибудь может предоставить какое-либо руководство.

1 Ответ

0 голосов
/ 10 июля 2019

Благодаря @Willeke, я понял, что это потому, что я просто ссылаюсь на "state", а не "cell.state", что необходимо для кнопок.

...