2010-11-05 5 views
8

Как распознать двойное касание на UIButton?Двойной контакт на UIButton

+3

Двойной трогательной не стенд ard, а также очевидное поведение UIButton. Вы должны пересмотреть, почему вам нужно это действие. –

ответ

33

Добавить целевой объект действие для события управления UIControlEventTouchDownRepeat и сделать действие только тогда, когда бесконтактный tapCount равен 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. 
    } 
} 

Как прокомментировал @Gavin, дважды -Тап на кнопке - необычный жест. В двухъядерной ОС iPhone OS используется в основном для масштабируемых представлений, чтобы увеличить или уменьшить область фокусировки. Для пользователей может быть неинтуитивным, если вы сделаете жест для выполнения других действий.

Swift 3:

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

И потом:

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

Спасибо, это чистое решение – Aitul

+0

Это может быть полезно для предотвращения нежелательных двойных кранов. Например, если вы делаете запрос на сервер. – johnnymire

+0

@johnnymire: вы также можете сразу отключить кнопку после первого щелчка. – kennytm

0

пытаются использовать это для кнопки события

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