Как сделать так, чтобы кнопка не запускала свое действие при переходе по клику? - PullRequest
1 голос
/ 13 июля 2011

В Руководстве по интерфейсу пользователя Apple указано, что :

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

и

Не предоставлять переход по элементу или действиючто:

  • потенциально опасен и не позволяет пользователю отменить его (например, кнопка «Удалить» в Mail)
  • Сложно или невозможно отменить (например, «Отправить»).кнопка в Почте)
  • Отключает диалоговое окно, не сообщая пользователю, какое действие было предпринято (например, кнопка Сохранить в диалоговом окне Сохранить, которая перезаписывает существующий файл и автоматически закрывает диалоговое окно)
  • Удаляетпользователь из текущего контекста (например, выбор нового элемента в столбце Finder может изменить цель окна Finder)

То, что я хочу сделать, - это если пользователь щелкаетконкретная кнопка не будет отправлять свое сообщение, если окно не активно (например, кнопка удаления сообщения в Почте).Как мне этого добиться?Если мне нужно создать подкласс NSButton, это нормально.

1 Ответ

1 голос
/ 13 июля 2011

Посмотрите на документацию NSView:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/instm/NSView/acceptsFirstMouse:

Вам необходимо переопределить acceptsFirstMouse, чтобы вернуть TRUE в , включить , щелкнуть.

Поведение по умолчанию не является переходом по клику:

Реализация по умолчанию игнорирует событие и возвращает НЕТ.

Возможно, вы уже переопределили этот метод в своем коде или в коде, на котором основан ваш код. Попробуйте удалить реализацию acceptsFirstMouse в своем коде.

...