Двойное касание на UIButton - PullRequest
11 голосов
/ 05 ноября 2010

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

Ответы [ 4 ]

37 голосов
/ 05 ноября 2010

Добавьте целевое действие для управляющего события 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.
    }
}
0 голосов
/ 04 июня 2019
[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];
    }
}
0 голосов
/ 26 января 2016
@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)
}
0 голосов
/ 30 октября 2012

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

UIControlEventTouchDownRepeat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...