Как распознать двойное касание на 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];
}
}