2012-06-22 27 views
9

Tôi có một nút mà tôi muốn biến mất nếu bất cứ điều gì được khai thác ngoài nút. Vì vậy, tôi đặt mục tiêu: hành động: cho nút xóa:Sự kiện nhấn nút có bị ghi đè bởi Tap Gesture Recognizer không?

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

theo sau bằng cách thêm các nhận dạng vòi cử chỉ để xem có chứa:

[self.superview addGestureRecognizer:self.tapOutsideDelete]; 

Khi tôi làm điều này, hành động cho deleteButton là không được thực hiện, như thể nút nhấn không được nhận dạng. Trình nhận dạng cử chỉ không hoạt động trong trường hợp này. Nhưng nó cũng hoạt động khi tôi nhấn deleteButton, điều này khiến tôi nghĩ rằng trình nhận dạng cử chỉ chạm có ưu tiên hơn nút nhấn.

Nếu tôi xóa trình nhận dạng cử chỉ, deleteButton hoạt động chính xác.

Tôi rõ ràng không hiểu cách xử lý hai sự kiện này cùng nhau. Tôi cần phải làm gì?

(deleteButton là bắt chước nút xóa của ô xem bảng, nhưng trong trường hợp này tôi có nó trong chế độ xem tiêu đề .Tôi mong đợi gọi phương thức để làm cho nút xóa biến mất khi tôi nhấn vào bất kỳ vị trí nào trong bảng ngoại trừ nút chính nó, giống như cách nó hoạt động trong một ô.)

+0

Bạn có thể nhận được một chút weirdness thêm các nhận dạng cử chỉ để self.superview thay vì tự (hoặc self.view nếu đó là một bộ điều khiển xem). Điều này sẽ thêm nó vào tableview có chứa khung nhìn header, chứ không phải là view header, có thể hoặc không thể là ý của bạn. – MusiGenesis

+0

bản sao có thể có của [Trình nhận dạng cử chỉ và thao tác nút] (http://stackoverflow.com/questions/4825199/gesture-recognizer-and-button-actions) –

Trả lời

12

Có, thao tác nhấn sẽ được bẻ khóa đầu tiên tại vòi nước. Bạn cần phải thực hiện các phương pháp gestureRecognizer:shouldReceiveTouch::

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
      shouldReceiveTouch:(UITouch *)touch { 

    if (touch.view == self.deleteButton) { 
     return NO; 
    } 
    return YES; 
} 
+2

Cảm ơn. Điều này làm việc hoàn hảo. Phải mất một chút đào để khám phá ra rằng đây là một phương thức đại biểu của giao thức UIGestureRecognizerDelegate, vì vậy con trỏ đại biểu cũng phải được thiết lập. – Jim

+0

@Jim: xin lỗi, tôi sẽ thêm nó. Đó là bực bội như thế nào rất nhiều hướng dẫn iOS vv trên web không chứa * tất cả * thông tin bạn cần cho một giải pháp, và tôi chỉ cần thêm vào nó. – MusiGenesis

Các vấn đề liên quan