2012-04-24 33 views
7

Tôi có một UIGestureRecognizer mà tôi muốn làm việc trên hai UIViews khác nhau, cả hai đều trong cùng một hệ thống phân cấp khung nhìn của một UiViewController. Các hành động của UIGestureRecognizer là về giống nhau trên mỗi, vì vậy tôi muốn cho cùng một chức năng được gọi là (nó sẽ, rõ ràng) và tôi sẽ nói lúc chạy mà UIViews tôi đang đối phó với. Nhưng bằng cách nào? Tôi không thể thấy rằng UIGestureRecognizer đang mang thông tin đối tượng với nó. Tôi có thiếu dòng trong tài liệu hoặc không gestureRecognizer không biết đối tượng mà nó đã được gắn vào mà nó đang được gọi là trên? Có vẻ như điểm của ngôn ngữ sẽ là nó sẽ biết.UIGestureRecognizer có biết đối tượng được gọi là gì không?

Ngoài ra, có lẽ tôi đang hiểu lầm mục đích của lớp và tôi không nên:

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
             action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTap]; 
[viewB addGestureRecognizer: dblTap]; 

và sau đó hy vọng sẽ có thể:

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer 
{ 
    if (viewA)... 

Nếu trên thực tế UIGestureRecognizer không hỗ trợ được gắn liền với nhiều đối tượng cùng một lúc, sau đó, nếu bạn biết tại sao nó không hỗ trợ điều này, bạn có thể giáo dục tôi không? Cảm ơn đã giúp đỡ.

+1

@NJones là đúng. Một chế độ xem cho mỗi trình nhận dạng. Bạn cũng có thể đặt thẻ cho mỗi trình nhận dạng để tìm ra trình nhận dạng nào được gọi là phương thức đó. –

Trả lời

21

Chuẩn là một chế độ xem cho mỗi trình nhận dạng. Nhưng bạn vẫn có thể sử dụng một phương pháp xử lý hiệu quả.

Bạn sẽ nhanh chóng bên nhận như vậy:

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapViewA]; 

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)]; 
[viewB addGestureRecognizer: dblTapViewB]; 

Sau đó, phương pháp xử lý của bạn có thể giống như thế:

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{ 
    if (tapRec.view == viewA){ 
     // double tap view a 
    } else if (tapRec.view == viewB) { 
     // double tap view b 
    } 
} 
+0

Điều đó đã được giải thích rõ cho tôi. Cảm ơn. – StoneBreaker

-1
UITapGestureRecognizer *dblTapA = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapA]; 

UITapGestureRecognizer *dblTapB = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[viewA addGestureRecognizer: dblTapB]; 
0

Bạn có thể gán một khóa để xem và sau đó chỉ cần so sánh mà và thực hiện hành động.

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
            action: @selector(handleDblTap:)]; 
[view addGestureRecognizer: dblTap]; 
view.tag = 2000; // set any integer 

Và trong khi gọi

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{ 
    if (tapRec.view.tag == 2000){ 
     // double tap view with tag 
    } 
} 
Các vấn đề liên quan