2010-11-05 15 views
8

UIButton'a çift dokunuş nasıl tanınır?UIButton'a çift dokunma

+3

Çift dokunma için kullanmak bir stand değil ard, ne de açık bir UIButton davranışı. Bu eyleme neden ihtiyaç duyduğunuzu tekrar gözden geçirmelisiniz. –

cevap

33

denetim olayının UIControlEventTouchDownRepeat için bir hedef-eylem ekleyin ve dokunmatik en tapCount 2.

Objective-C olduğu zaman eylem yapmak:

[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. 
    } 
} 

@Gavin yorumladığı gibi, çift Bir düğmeye dokunarak alışılmadık bir jest. IPhone OS'de çift dokunma, bir odak bölgesinin yakınlaştırılması/uzaklaştırılması için çoğunlukla zumlanabilir görünümler için kullanılır. Eğer hareketi başka eylemler gerçekleştirirseniz, kullanıcılar için sorun olmayabilir.

Swift 3: sonra

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

Ve:

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

Teşekkürler, bu temiz bir çözümdür – Aitul

+0

Bu, istenmeyen çift tıkanıklıkları önlemek için yararlı olabilir. Örneğin bir sunucuya istek yapıyorsanız. – johnnymire

+0

@johnnymire: İlk tıklamadan sonra düğmeyi derhal devre dışı bırakabilirsiniz. – kennytm

0

deneyin düğmesi olayı

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) 
}