Различение одиночного нажатия от двойного щелчка в Какао на Mac

Вы можете использовать BigInteger, если вы работаете с длинным. Это может быть сколько угодно

Вы также можете использовать BigDecimal при работе с числами с плавающей запятой.

17
задан Constantino Tsarouhas 17 July 2011 в 14:21
поделиться

4 ответа

Задержка изменения состояния выбора (из того, что я видел) является рекомендуемым способом сделать это.

Это довольно просто реализовать:

- (void)mouseUp:(NSEvent *)theEvent
{
    if([theEvent clickCount] == 1) {
        [model performSelector:@selector(toggleSelectedState) afterDelay:[NSEvent doubleClickInterval]];
    }
    else if([theEvent clickCount] == 2)
    {
        if([model hasBeenDownloaded])
        {
                [NSRunLoop cancelPreviousPerformRequestsWithTarget: model]; 
                [mainWindowController showPreviewWindowForPicture:model];
        }
    }
}

(Обратите внимание, что в 10.6 интервал двойного щелчка доступен как метод класса на NSEvent )

40
ответ дан 30 November 2019 в 10:36
поделиться

решение DeLong @Dave в Swift 4.2 (Xcode 10, macOS 10.13), исправленный для использования с event.location (в: представление)

var singleClickPoint: CGPoint?

override func mouseDown(with event: NSEvent) {
singleClickPoint = event.location(in: self)
perform(#selector(GameScene.singleClickAction), with: nil, afterDelay: NSEvent.doubleClickInterval)
 if event.clickCount == 2 {
    RunLoop.cancelPreviousPerformRequests(withTarget: self)
    singleClickPoint = nil
//do whatever you want on double-click
}
}

@objc func singleClickAction(){
guard let singleClickPoint = singleClickPoint else {return}
//do whatever you want on single-click
}

причина я не использую singleClickAction (в точке: CGPoint) и вызов его с: event.location (в: сам), то, что любая точка, которую я передаю в - включая CGPoint.zero - заканчивает тем, что прибыла в singleClick Действие как (0.0, 9.223372036854776e+18). Я буду регистрировать радар для этого, но на данный момент, обход работает, способ пойти. (Другие объекты, кажется, работают просто великолепно, но CGPoints не делают.)

1
ответ дан 30 November 2019 в 10:36
поделиться

If your single-click and double-click operations are really separate and unrelated, you need to use a timer on the first click and wait to see if a double-click is going to happen. That is true on any platform.

But that introduces an awkward delay in your single-click operation that users typically don't like. So you don't see that approach used very often.

A better approach is to have your single-click and double-click operations be related and complementary. For example, if you single-click an icon in Finder it is selected (immediately), and if you double-click an icon it is selected and opened (immediately). That is the behavior you should aim for.

In other words, the consequences of a single-click should be related to your double-click command. That way, you can deal with the effects of the single-click in your double-click handler without having to resort to using a timer.

7
ответ дан 30 November 2019 в 10:36
поделиться

Лично я считаю, что вам нужно спросить себя, зачем вам такое нестандартное поведение.

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

2
ответ дан 30 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: