2012-05-11 28 views
11

Trong chương trình của tôi, tôi có UITapGestureRecognizer mà tôi đã khởi tạo với initWithTarget: action:. Tôi đã chuyển vào bộ chọn để gọi phương thức theo tên PlanetTapped: (UIImageView *)aPlanet. Điều này gọi là phương pháp tốt, tuy nhiên tôi muốn biết làm thế nào để vượt qua đối số vào action: như bạn sẽ với performSelector: withObject. Đây có phải là popssible? Nó sẽ có ý nghĩa để cho phép bạn gửi các đối số cho bộ chọn của UIGestureRecognizer. Bất kỳ trợ giúp được đánh giá cao.Gửi đối số cho bộ chọn khởi chạy trình nhận dạng cử chỉ?

Trả lời

13

Chữ ký chính xác cho các phương pháp để gọi sẽ là:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer 

sau đó bạn có thể truy cập vào quan điểm cho rằng đã nhận được cử chỉ bằng cách gọi:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer { 

    UIImageView* aPlanet = gestureRecognizer.view; 
    ... 
} 

Trên thực tế, đây là những gì UIGestureRecognizer reference trạng thái:

Trình nhận dạng cử chỉ có một hoặc nhiều cặp hành động mục tiêu được liên kết với nó. Nếu có nhiều cặp mục tiêu-hành động, chúng là rời rạc, và không tích lũy. Việc nhận dạng cử chỉ dẫn đến việc gửi một thông báo hành động đến một mục tiêu cho mỗi cặp đó. Các phương thức hành động được gọi phải tuân theo một trong các chữ ký sau:

  • (void) handleGesture;
  • (void) handleGesture: (UIGestureRecognizer *) gestureRecognizer;
+0

Ahh, tất nhiên rồi. Tôi nên nghĩ về điều đó. Cảm ơn bạn đã giúp đỡ! – Fitzy

6
- (void)viewDidLoad 
{ 
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnPhotos:)]; 
[yourView addGestureRecognizer:longPressRecognizer]; 
} 



- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender{ 
// use "sender.view" to get the "yourView" you have long pressed 
} 

hy vọng đây sẽ giúp bạn.

0

Trong Swift 3.0, chữ ký chức năng là như sau (thay thế một lớp cử chỉ nhận dạng như thích hợp trong những ví dụ):

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer) 

Bạn tham khảo chức năng này khi thiết lập Recognizers Gesture của bạn như sau:

longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:))) 

Sau đó, để truy cập vào xem (trong trường hợp của tôi, một nút) mà đã được ép, sử dụng mã:

if let button = sender.view as? UIButton { 
    // Your code here 
} 

Cuối cùng, đừng quên rằng chức năng này được gọi là nhiều lần (thường là khi cử chỉ bắt đầu và khi nó kết thúc), vì vậy bạn sẽ muốn kiểm tra trạng thái, mà bạn có thể làm như sau:

if (sender.state == UIGestureRecognizerState.ended) { 
    // Your code here 
} 
Các vấn đề liên quan