У меня есть NSButtons в каждой строке NSTableView.
Изображения кнопок задаются в IB и представляют собой черные значки с альфа-каналом:
Окна установлены в темный режим с помощью:
window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
И в обычный режим с:
window?.appearance = nil
Цель состоит в том, чтобы кнопки были черными, когда окно белое, и белыми, когда окно темное, не изменяясь при нажатии.
В темном режиме, чтобы добиться изменения цвета, я установил для свойства «шаблон» изображения кнопки значение true в подклассе NSTableCellView:
public override func awakeFromNib() {
if darkMode {
button.image?.isTemplate = true
} else {
button.image?.isTemplate = false
}
}
Кнопки в IB сделаны так:
Это хорошо работает в macOS 10.12 Sierra: когда окно белое, нажатие на черную кнопку не меняет его внешний вид, и это идеально.
Но когда окно темное, нажатие на белую кнопку делает его черным, что в моем случае неприемлемо (*). Кроме того, изображение шаблона просто не работает в macOS 10.11 El Capitan.
Ok:
Щелкнул, не ок:
И повторное нажатие на почерневшую кнопку снова делает ее белой...
Мой вопрос: как заставить NSButton не выделять изображение шаблона при нажатии?
Я думал, что это из-за типа «Мгновенное изменение», но использование других «мгновенных» ничего не меняет, и я также не могу установить тип «пользовательский» (IB отказывается).
Обратите внимание, что эти образы шаблонов ведут себя по-разному в macOS 10.11 по сравнению с macOS 10.12. Комбинации настроек, которые без проблем работают в Sierra, не работают в El Capitan. Именно поэтому я установил вознаграждение: мне нужно решение для обеих систем. Если решения нет и вы знаете, почему, то ваше объяснение также будет приемлемым ответом.
(*) обходной путь доступен в Sierra, где работает изображение шаблона, с помощью use button.cell?.setCellAttribute(.cellLightsByContents, to: 0)
, чтобы кнопка не меняла цвет определенно при нажатии (хотя все еще есть короткая вспышка). Но в El Capitan кнопка черная в темном режиме, так что это не применимо.
isTemplate
изображения кнопки при переключении в темный режим? - person rob mayoff   schedule 29.05.2017highlightsBy
илиshowsStateBy
наNSButtonCell
? Настройка одного или обоих из них по мере изменения внешнего вида окна может дать вам результаты, которые вы ищете. - person kennyc   schedule 29.05.2017button.cell?.setCellAttribute(.cellLightsByContents, to: 0)
, чтобы точно остановить изменение цвета кнопки (хотя все еще есть короткая вспышка). Но в El Capitan кнопка черная в темном режиме, так что это не применимо (и, похоже, ничего не делает). - person Eric Aya   schedule 29.05.2017isTemplate
, но в El Capitan все те же проблемы, кнопки черные в темном режиме, становятся белыми при нажатии и становятся черными снова при повторном нажатии. - person Eric Aya   schedule 30.05.2017isTemplate
? Это не то, что я предложил. Я предлагал вам установитьisTemplate
перед установкой изображения на кнопку. - person Ken Thomases   schedule 30.05.2017