2010-11-05 25 views
8

Làm thế nào để nhận biết chạm đôi trên UIButton?Chạm đúp vào UIButton

+3

đúp cảm động không phải là một lập trường ard, cũng không phải là hành vi UIButton rõ ràng. Bạn nên xem xét lại lý do tại sao bạn cần hành động này. –

Trả lời

33

Thêm mục tiêu hành động cho sự kiện điều khiển UIControlEventTouchDownRepeat, và làm hành động chỉ khi của tapCount cảm ứng là 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. 
    } 
} 

Như @Gavin nhận xét, đôi -tap trên một nút là một cử chỉ bất thường. Khi nhấn đúp vào hệ điều hành iPhone, chủ yếu được sử dụng cho các chế độ xem có thể thu phóng để phóng to/thu nhỏ vùng tiêu điểm. Nó có thể không trực quan đối với người dùng nếu bạn thực hiện cử chỉ để thực hiện các hành động khác.

Swift 3:

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

Và sau đó:

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

Cảm ơn, đây là giải pháp sạch – Aitul

+0

Điều này có thể hữu ích trong việc ngăn ngừa các thao tác nhấn không mong muốn. Ví dụ nếu bạn đang thực hiện một yêu cầu đến một máy chủ. – johnnymire

+0

@johnnymire: Bạn cũng có thể tắt ngay lập tức nút sau lần nhấp đầu tiên. – kennytm

0

cố gắng sử dụng này cho sự kiện nút

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) 
} 
Các vấn đề liên quan