2010-05-07 24 views
56

Làm cách nào để biết con của bạn xem sự kiện nào xảy ra khi sử dụng UIGestureRecognizers?Tìm xem chế độ xem con nào được nhấn khi sử dụng UITapGestureRecognizer

Theo tài liệu:

Một recognizer cử chỉ hoạt động trên chạm lần truy cập thử nghiệm để một cái nhìn cụ thể và tất cả các subviews của quan điểm đó.

Theo như tôi thấy, 'xem' tài sản là

Các quan điểm nhận dạng cử chỉ là kèm theo.

sẽ là chế độ xem gốc.

Trả lời

162

Điều này sẽ tìm thấy hình ảnh hậu duệ trong cùng tại vị trí của sự kiện. (Lưu ý rằng nếu đó xem đứa trẻ có bất kỳ cháu tin nội bộ tương tác mã này sẽ tìm những người quá.)

UIView* view = gestureRecognizer.view; 
CGPoint loc = [gestureRecognizer locationInView:view]; 
UIView* subview = [view hitTest:loc withEvent:nil]; 

Trong Swift 2:

let view = gestureRecognizer.view 
let loc = gestureRecognizer.locationInView(view) 
let subview = view?.hitTest(loc, withEvent: nil) // note: it is a `UIView?` 

Trong Swift 3:

let view = gestureRecognizer.view 
let loc = gestureRecognizer.location(in: view) 
let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?` 
+0

Tuyệt vời! Cảm ơn rất nhiều - điều đó thực sự đã giúp tôi! – RPM

+0

Tuyệt vời! Điều này sẽ giúp ích rất nhiều so với trường hợp này :) – RileyE

+10

Chỉ muốn thêm rằng 'hitTest: withEvent:' sẽ đi xa cây của trẻ em nhất có thể. Nếu có bất kỳ bản xem trước nào hoặc các bản xem trước của các bản xem trước mà bạn muốn bỏ qua, bạn có thể đặt 'userInteractionEnabled = NO' trên các chế độ xem đó. – robotspacer

-1

Đối với người dùng tương lai ... Tôi đã có một lựa chọn tốt hơn bây giờ khi thế giới không sử dụng obj-c nữa ...

[sender view]

sử dụng nó theo cách này:

UITapGestureRecognizer * objTapGesture = [self createTapGestureOnView:myTextField]; 

[objTapGesture addTarget:self action:@selector(displayPickerView:)]; 

// thêm các phương pháp

-(void)displayPickerView:(UITapGestureRecognizer*)sender 
{ 
    UITextField *textField = (UITextField*)[sender view]; 
    NSLog(@"tag= %ld", (long)textField.tag); 
} 

-(UITapGestureRecognizer*)createTapGestureOnView:(UIView *)view 
{ 
    view.userInteractionEnabled = YES; 
    UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]init]; 
    tapGesture.numberOfTapsRequired = 1; 
    tapGesture.numberOfTouchesRequired = 1; 
    [view addGestureRecognizer:tapGesture]; 
    return tapGesture; 
} 
+0

- [Chế độ xem nhận dạng UIGestureRecognizer] trả về một chế độ xem được đính kèm (mỗi thông số kỹ thuật); OP quan tâm đến tiểu sử của chế độ xem đó. –

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