Как НЕ выделять изображение шаблона NSButton при нажатии?

У меня есть 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 кнопка черная в темном режиме, так что это не применимо.


person Eric Aya    schedule 22.05.2017    source источник
comment
Возможно, возможное решение: stackoverflow.com/ вопросы/20064046/ ?   -  person Larme    schedule 29.05.2017
comment
@Larme Спасибо, но, к сожалению, речь идет о цвете фона обычных кнопок, где мой вопрос касается изображения шаблона кнопок (у моих кнопок нет фона).   -  person Eric Aya    schedule 29.05.2017
comment
Вы сказали: «Я заставляю кнопки иметь тип шаблона». Нет стиля кнопки или типа с именем «шаблон». Отредактируйте свой вопрос, включив в него снимок экрана с атрибутами кнопки в IB (если вы создали его в xib или раскадровке) или включите код, создающий кнопку.   -  person rob mayoff    schedule 29.05.2017
comment
@robmayoff Действительно, это было плохо объяснено. Я сделал редактирование с дополнительной информацией.   -  person Eric Aya    schedule 29.05.2017
comment
Вы перезагружаете таблицу при переходе в темный режим? Или сделать что-то еще, чтобы изменить флаг isTemplate изображения кнопки при переключении в темный режим?   -  person rob mayoff    schedule 29.05.2017
comment
@robmayoff Нет, приложение перезапущено, смены окна в реальном времени нет. Я пытался, но у меня было слишком много проблем с tableViews и их контентом, который не перерисовывался должным образом, поэтому я просто перезапускаю, когда пользователь меняет режим. Не идеально, но приемлемо. // Единственное, что меняется, это NSAppearance окна и свойство шаблона кнопок. И, конечно же, цвет фона tableView, чтобы он соответствовал окну (потому что clear не работал).   -  person Eric Aya    schedule 29.05.2017
comment
Вы пробовали поиграть со свойствами highlightsBy или showsStateBy на NSButtonCell? Настройка одного или обоих из них по мере изменения внешнего вида окна может дать вам результаты, которые вы ищете.   -  person kennyc    schedule 29.05.2017
comment
@kennyc Да, в Sierra изображение шаблона работает, и я могу использовать button.cell?.setCellAttribute(.cellLightsByContents, to: 0), чтобы точно остановить изменение цвета кнопки (хотя все еще есть короткая вспышка). Но в El Capitan кнопка черная в темном режиме, так что это не применимо (и, похоже, ничего не делает).   -  person Eric Aya    schedule 29.05.2017
comment
Переключение шаблонности изображения после того, как оно уже было установлено на кнопке, кажется подозрительным. Почему у вас когда-либо было изображение, не являющееся шаблоном? Попробуйте либо назвать файл изображения так, чтобы он заканчивался на Template, чтобы он всегда автоматически был шаблонным изображением, либо не назначать его кнопке в NIB, а программно после установить его как шаблонное изображение. Вы также можете попробовать установить то же изображение, что и альтернативное изображение кнопки.   -  person Ken Thomases    schedule 30.05.2017
comment
@KenThomases Мне пришлось установить нешаблон с белыми окнами, иначе значки стали серыми ... (как на Sierra, так и на El Capitan). // Я удалил изображение из IB и установил его в коде до установки isTemplate, но в El Capitan все те же проблемы, кнопки черные в темном режиме, становятся белыми при нажатии и становятся черными снова при повторном нажатии.   -  person Eric Aya    schedule 30.05.2017
comment
Подождите, вы устанавливаете изображение на кнопку до установки isTemplate? Это не то, что я предложил. Я предлагал вам установить isTemplate перед установкой изображения на кнопку.   -  person Ken Thomases    schedule 30.05.2017
comment
@KenThomases К сожалению, да, я прочитал это задом наперед. // Просто сделал, как вы на самом деле предлагаете, и... происходит нечто удивительное (в 10.12 у меня сейчас нет доступа к 10.11 для тестирования). В темном режиме кнопка черная, и когда я нажимаю на нее, она становится белой, но также и во всех других строках tableView, внезапно! После этого он работает нормально, но начальное состояние неверно. Но в белом режиме кнопки серые... и остаются серыми после нажатия (также с короткой вспышкой).   -  person Eric Aya    schedule 30.05.2017
comment
Примечание: не тратьте на меня свое время, в этой версии этого приложения я просто буду использовать два набора значков, черный и белый, и забуду о шаблонах. Я только что протестировал, и он решает все проблемы для обеих версий ОС. Большое спасибо за помощь. :)   -  person Eric Aya    schedule 30.05.2017
comment
Однако, конечно, мне все еще очень любопытно все это. Если кто-то хочет объяснить эти различия между 10.11 и 10.12 в отношении шаблонов изображений и где инициализировать шаблоны, если не в awakeFromNib подкласса NSTableCellView, и проблемы, связанные с иконками, находящимися в tableView, и почему кнопки ведут себя по-разному с и без NSAppearance это может быть интересным ответом.   -  person Eric Aya    schedule 30.05.2017
comment
@Moritz Эй, честно говоря, я играл с ним раньше - и этот шаблон никогда не работал должным образом :-(, каждый раз, когда я сталкивался с проблемой, я просто помещал 2 набора изображений для яркого и темного режима - я думаю, что раньше в Эль-Капитане он работал нормально, но в Эль-Капитане он полностью сломался - стоит запустить радар ошибок для Apple.   -  person ColdSteel    schedule 13.10.2017