2010-11-05 12 views
8

Jak rozpoznać podwójne dotknięcie na Uibutton?Double touch on UIButton

+3

dwukrotnie dotykając nie jest podstawka ard, ani oczywiste zachowanie UIButton. Powinieneś zastanowić się, dlaczego potrzebujesz tej akcji. –

Odpowiedz

33

Dodaj docelową-działanie dla zdarzenia sterowania UIControlEventTouchDownRepeat, a nie tylko wtedy, gdy działanie touch tapCount to 2.

Objective-C:

[button addTarget:self action:@selector(multipleTap:withEvent:) 
      forControlEvents:UIControlEventTouchDownRepeat]; 

... 

-(IBAction)multipleTap:(id)sender withEvent:(UIEvent*)event { 
    UITouch* touch = [[event allTouches] anyObject]; 
    if (touch.tapCount == 2) { 
    // do action. 
    } 
} 

Jak skomentował @Gavin dwukrotnie -przycisk na przycisku jest niezwykłym gestem. W systemie iPhone OS dwukrotne dotknięcie służy głównie do powiększania widoków w celu powiększenia/pomniejszenia obszaru ostrości. Może to być niezrozumiałe dla użytkowników, jeśli wykonasz gest w celu wykonania innych czynności.

Swift 3:

button.addTarget(self, action: #selector(multipleTap(_:event:)), for: UIControlEvents.touchDownRepeat) 

A potem:

func multipleTap(_ sender: UIButton, event: UIEvent) { 
    let touch: UITouch = event.allTouches!.first! 
    if (touch.tapCount == 2) { 
     // do action. 
    } 
} 
+1

Dzięki, to jest czyste rozwiązanie – Aitul

+0

Może to być przydatne do zapobiegania niechcianym podwójnym dotknięciom. Na przykład, jeśli wysyłasz żądanie do serwera. – johnnymire

+0

@johnnymire: Równie dobrze można natychmiast wyłączyć przycisk po pierwszym kliknięciu. – kennytm

0

spróbuje użyć tego dla przycisku przypadku

UIControlEventTouchDownRepeat 
0
@IBOutlet weak var button: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    button.addTarget(self, action: "didTap:", forControlEvents: .TouchUpInside) 
    button.addTarget(self, action: "didDoubleTap:", forControlEvents: .TouchDownRepeat) 

} 

var ignoreTap = false 
func didTap(sender: UIButton) { 
    if ignoreTap { 
     ignoreTap = false 
     print("ignoretap", sender) 
     return 
    } 
    print("didTap", sender) 
} 

func didDoubleTap(sender: UIButton) { 
    ignoreTap = true 
    print("didDoubleTap", sender) 
}