Двойной контакт с UIButton

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

Ответ 1

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

Ответ 2

попробуйте использовать это для события кнопки

UIControlEventTouchDownRepeat

Ответ 3

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

Ответ 4

[button addTarget:self action:@selector(button_TouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(button_TouchDownRepeat:withEvent:) forControlEvents:UIControlEventTouchDownRepeat];

-(void)button_one_tap:(UIButton*) button
{
    NSLog(@"button_one_tap");
}
-(void)button_double_tap:(UIButton*) button
{
    NSLog(@"button_double_tap");

}

-(void)button_TouchDown:(UIButton*) button
{
    NSLog(@"button_TouchDown");
    [self performSelector:@selector(button_one_tap:) withObject:button afterDelay:0.3 /*NSEvent.doubleClickInterval maybe too long*/];
}
-(void)button_TouchDownRepeat:(UIButton*) button withEvent:(UIEvent*)event {
    NSLog(@"button_TouchDownRepeat");

    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(button_one_tap:) object:button];

    UITouch* touch = [[event allTouches] anyObject];
    //NSLog(@"touch.tapCount = %ld", touch.tapCount);
    if (touch.tapCount == 2) {
        // do action.
        [self button_double_tap:button];
    }
}