Какие секретные вещи происходят с моим NSButtonCell?
Я пишу приложение для OS X (цель 10.10, Xcode 6.1), и меня действительно смущает мой собственный подкласс NSButtonCell. Кажется, что здесь происходят вещи, которые не должны. Я новичок в программировании на OS X, поэтому я спрашиваю, есть ли у кого-нибудь понимание внутренней работы NSButtonCell.
Во-первых, что, кажется, работает?
- Я могу установить изображение и название кнопки. Изображение появляется нормально.
- Раскадровка устанавливает кнопку "Стиль: текстурированная" и "Тип: мгновенное изменение". Он не граничит, не прозрачен и не допускает смешанного состояния.
Список жалоб:
- Я переопределяю
-drawTitle:withFrame:inView:
нарисовать заголовок в пользовательском цвете в зависимости от ячейкиhighlighted
, Этот цвет должен быть#cccccc
когда ячейка не выделена, но это на самом деле#d6d6d6
, - Кнопка имеет как изображение, так и альтернативное изображение. Рисуемое изображение никогда не является альтернативным, поэтому я переопределяю
-drawImage:withFrame:inView:
выбрать правильное изображение для клеткиhighlighted
, Кажется, это работает, но какого чёрта, NSButtonCell? Чем состояние включения / выключения отличается от выделенного? Я перепробовал многие параметры типа, и ни один из них не меняет того факта, что нажатие кнопки на мгновение изменитhighlighted
и переключитьstate
, - Говоря о мгновенном изменении выделенного, кажется, что его продолжительность как можно короче, поэтому мне пришлось реализовать своего рода "дебоунсер", чтобы предотвратить
-drawWithFrame:inView:
от вызова чаще, чем указанный порог. - Моя кнопка ячейки также имеет свойства
myBackgroundColor
а такжеmyAlternateBackgroundColor
, Я не пользуюсьbackgroundColor
потому что мне нужно уметь рисовать фоновую форму (закрашенный прямоугольник, закрашенный круг и т. д.). Альтернативный цвет фона используется, когдаhighlighted
, Проблема здесь в том, что альтернативный цвет фона должен быть#93edbf
но, похоже,#a1eecb
! Чтобы он выглядел как#93edbf
Мне нужно установить цвет на#84ecb2
, - До сих пор все это было об одном конкретном случае этой ячейки кнопки. Но в другом случае альтернативный фон не рисует вообще! Я прочитал код раскадровки, и кнопки такие же, как они могут быть. Мой код контроллера представления также обновляет свойства обеих ячеек кнопки одновременно. Почему одна кнопка ведет себя иначе, чем другая?
- Я хочу, чтобы кнопка выделялась при наведении мыши, а не на мгновение после поднятия мыши Я еще не реализовал это в своей пользовательской ячейке. Чувак, NSButtonCell действительно не хватает некоторых вещей. Как происходит что-то подобное? Разве команды OS X и iOS никогда не общаются друг с другом?
Что бы это могло быть?
Я уже убедился, что клетка controlTint
установлен в NSClearControlTint
, Я проверил фоновые фильтры, фильтры композитинга и фильтры контента на случай, если они имеют какое-либо отношение к этому.
Я знаю, что Apple действительно хочет, чтобы мы использовали их собственный внешний вид для элементов пользовательского интерфейса, но я никогда не думал, что они зайдут так далеко, чтобы заставить использовать некоторый оттенок подсветки.