Получение события двойного щелчка

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

Может кто-нибудь показать мне пример события двойного щелчка?


person Sciguy77    schedule 19.08.2011    source источник
comment
@duskwuff OSX (см. теги)   -  person Sciguy77    schedule 20.08.2011
comment
@duskwuff: Кроме того, в iOS нет кликов.   -  person Peter Hosey    schedule 20.08.2011
comment
Верно, мне интересно, ищете ли вы (вероятно, несуществующее?) событие двойного нажатия на iOS.   -  person    schedule 20.08.2011


Ответы (3)


Переопределите метод NSResponder -mouseUp: и проверьте предоставленное событие clickCount. Если clickCount == 2, то вы видите двойной щелчок. Если это 1, то один клик. 0, то они ждали достаточно долго между нажатием и поднятием мыши, чтобы система решила, что это не щелчок, а просто отдельные события вниз и вверх.

- (void)mouseUp:(NSEvent *)event
{
    NSInteger clickCount = [event clickCount];
    if (2 == clickCount) [self handleDoubleClickEvent:event];
}

Это предполагает, что объект, обрабатывающий щелчок, является частью цепочки респондента. Если нет, вам придется получать события другим способом, например создавать подклассы NSApplication или NSWindow и переопределять -sendEvent: для перехвата соответствующего события до того, как оно будет передано дальше.

person Jeremy W. Sherman    schedule 19.08.2011
comment
Следует подчеркнуть, что «NSResponder» в этом ответе относится к классу в Cocoa (от которого наследуются NSView, NSWindow и NSApplication), а не к другому ответчику, который назвал себя в его честь. - person Peter Hosey; 20.08.2011

См. метод NSEvent -clickCount.

person NSResponder    schedule 19.08.2011

Также обратите внимание, что некоторые NSControl имеют setDoubleAction:, так что селектор, зарегистрированный через setDoubleAction:, отправляется в цель. См. официальную документацию

person Yuji    schedule 20.08.2011
comment
Событие (объект NSEvent) не передается цели; сообщение о действии отправляется цели, но, как обычно для сообщения о действии, единственным аргументом является элемент управления (представление таблицы или что-то еще), отправляющий сообщение. Я уверен, что вы не имели в виду объект NSEvent, но я хотел убедиться, что это ясно. - person Peter Hosey; 20.08.2011
comment
Да, это то, что я имел в виду; Я перефразирую. Спасибо. - person Yuji; 20.08.2011
comment
В моем случае мне пришлось установить цель для NSTableView при работе в ОС до 10.10, но 10.10 работала нормально без установки цели (я в моем случае) - person ghr; 30.08.2016