Вы можете использовать BigInteger
, если вы работаете с длинным. Это может быть сколько угодно
Вы также можете использовать BigDecimal
при работе с числами с плавающей запятой.
Задержка изменения состояния выбора (из того, что я видел) является рекомендуемым способом сделать это.
Это довольно просто реализовать:
- (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
)
решение 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 не делают.)
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.
Лично я считаю, что вам нужно спросить себя, зачем вам такое нестандартное поведение.
Можете ли вы указать на любое другое приложение, которое рассматривает первый щелчок двойного щелчка как отличается от простого щелчка? Я не могу придумать ничего ...