NSResponder, кажется, не имеет события двойного щелчка мыши. Есть ли простой способ поймать двойной щелчок?Ловля двойного щелчка в Cocoa OSX
ответ
Методы mouseDown:
и mouseUp:
принимают объект NSEvent в качестве аргумента с информацией о кликах, включая clickCount
.
Обычно приложения смотрят на clickCount == 2 on - [mouseUp:], чтобы определить двойной щелчок.
Одно из уточнений заключается в том, чтобы отслеживать местоположение щелчка мышью по значку [mouseDown:] и видеть, что дельта на месте расположения мыши небольшая (5 или менее точек как для x, так и для y).
NSEvent
сгенерировано для mouseDown:
и mouseUp:
имеет свойство под названием clickCount
. Проверьте, если это два, чтобы определить, произошел ли двойной щелчок.
Пример реализации:
- (void)mouseDown:(NSEvent *)event {
if (event.clickCount == 2) {
NSLog(@"Double click!");
}
}
Просто поместите, что в вашем NSResponder
(например, как NSView
) подкласса.
И что бы вы обычно делали, если вам нужно обрабатывать оба - один клик и двойной щелчок. Очевидно, вам придется игнорировать однократный щелчок, если в итоге получается двойным щелчком? – jayarjo
@jayarjo - В верхней части моей головы я не могу думать о месте, где действие, выполняемое одним щелчком, не должно выполняться, если окажется, что необходим двойной щелчок. В текстовых полях один клик помещает ваш курсор в определенное место. Двойной щелчок подчеркивает это целое слово. Поэтому перемещение курсора на один клик было безобидным. В играх RTS (по крайней мере, Blizzard) одним нажатием выбирает один блок, а двойной щелчок выбирает все единицы этого типа. Если вы хотите, чтобы двойной щелчок делал что-то совершенно отличное от того, что делает один клик, вы можете переосмыслить весь свой UX. – ArtOfWarfare
Проблема с простым решением clickCount
заключается в том, что двойной щелчок рассматривается просто как два клика. Я имею в виду, что вы все равно получаете один клик. И если вы хотите по-другому реагировать на этот единственный клик, вам нужно что-то поверх простого подсчета кликов. Вот что я закончил с (в Swift):
private var _doubleClickTimer: NSTimer?
// a way to ignore first click when listening for double click
override func mouseDown(theEvent: NSEvent) {
if theEvent.clickCount > 1 {
_doubleClickTimer!.invalidate()
onDoubleClick(theEvent)
} else if theEvent.clickCount == 1 { // can be 0 - if delay was big between down and up
_doubleClickTimer = NSTimer.scheduledTimerWithTimeInterval(
0.3, // NSEvent.doubleClickInterval() - too long
target: self,
selector: "onDoubleClickTimeout:",
userInfo: theEvent,
repeats: false
)
}
}
func onDoubleClickTimeout(timer: NSTimer) {
onClick(timer.userInfo as! NSEvent)
}
func onClick(theEvent: NSEvent) {
println("single")
}
func onDoubleClick(theEvent: NSEvent) {
println("double")
}
Лично я проверяю двойной щелчок на MouseUp функции:
- (void)mouseUp:(NSEvent *)theEvent
{
if ([theEvent clickCount] == 2)
{
CGPoint point = [theEvent locationInWindow];
NSLog(@"Double click on: %f, %f", point.x, point.y);
}
}
- 1. OS X Скорость двойного щелчка
- 2. Как перехватить событие двойного щелчка в папке osx?
- 3. Youtube видео двойного щелчка
- 4. Хранение первого двойного щелчка
- 5. Кнопка события двойного щелчка
- 6. Событие двойного щелчка TreeView
- 7. Функция двойного щелчка изображения
- 8. Событие двойного щелчка CMFCStatusBar
- 9. Предотвращение двойного щелчка от двойного обжига команды
- 10. Установщик двойного щелчка в Ubuntu?
- 11. Захват двойного щелчка в ngTable
- 12. идентификация двойного щелчка в java
- 13. Ловля щелчка в любом месте внутри Gtk.Window
- 14. Cocoa/OSX tagging UI
- 15. Заполнение NSBrowser (Cocoa OSX)
- 16. создание двойного щелчка по диаграмме
- 17. Adobe Flex Предотвращение двойного щелчка
- 18. GaugeControl обработчик события двойного щелчка
- 19. jquery ajax - событие двойного щелчка
- 20. Как избежать непрерывного двойного щелчка?
- 21. Flex4 Элемент списка двойного щелчка
- 22. Длительность интервала двойного щелчка неопределенно
- 23. QT событие двойного щелчка клавиатуры
- 24. Преобразования двойного щелчка, чтобы коснуться
- 25. Поведение двойного щелчка Strange Flex
- 26. Android onOptionsItemВыбранный избегать двойного щелчка
- 27. Дата Picker Now. Cocoa-OSX Swift
- 28. OSX Cocoa Bad Инструкция аварии
- 29. NSFileManager FileSize Problem - Cocoa OSX
- 30. Предотвращение активации NSTextField (Cocoa OSX)
ИМХО это самый полезный ответ, поскольку она также отвечает неявный вопрос о том, реагировать ли на второе mouseDown или второе mouseUp. Конечно, в определенных ситуациях может иметь смысл отклоняться от стандарта. К сожалению, сами Apple не совсем придерживаются одного стандарта (Finder и Mail on up, Calendar on down) ... – fzwo