Какие секретные вещи происходят с моим NSButtonCell?

Я пишу приложение для OS X (цель 10.10, Xcode 6.1), и меня действительно смущает мой собственный подкласс NSButtonCell. Кажется, что здесь происходят вещи, которые не должны. Я новичок в программировании на OS X, поэтому я спрашиваю, есть ли у кого-нибудь понимание внутренней работы NSButtonCell.

Во-первых, что, кажется, работает?

  1. Я могу установить изображение и название кнопки. Изображение появляется нормально.
  2. Раскадровка устанавливает кнопку "Стиль: текстурированная" и "Тип: мгновенное изменение". Он не граничит, не прозрачен и не допускает смешанного состояния.

Список жалоб:

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

Что бы это могло быть?

Я уже убедился, что клетка controlTint установлен в NSClearControlTint, Я проверил фоновые фильтры, фильтры композитинга и фильтры контента на случай, если они имеют какое-либо отношение к этому.

Я знаю, что Apple действительно хочет, чтобы мы использовали их собственный внешний вид для элементов пользовательского интерфейса, но я никогда не думал, что они зайдут так далеко, чтобы заставить использовать некоторый оттенок подсветки.

0 ответов

Другие вопросы по тегам