IT Share you

UITapGestureRecognizer를 사용할 때 탭한 자식보기 찾기

shareyou 2020. 11. 9. 21:36
반응형

UITapGestureRecognizer를 사용할 때 탭한 자식보기 찾기


UIGestureRecognizers를 사용할 때 이벤트가 발생한 자식보기를 어떻게 알 수 있습니까?

문서에 따르면 :

제스처 인식기는 특정보기 및 해당보기의 모든 하위보기에 대해 적중 테스트 된 터치에서 작동합니다.

내가 볼 수있는 한, 'view'속성은

제스처 인식기가 연결된보기입니다.

상위 뷰가됩니다.


이벤트 위치에서 가장 안쪽의 하위보기를 찾습니다. (해당 하위 뷰에 대화 형 내부 개인 손자가있는 경우이 코드도 해당 항목을 찾습니다.)

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

Swift 2 :

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

Swift 3 :

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

미래 사용자를 위해 ... 세상이 더 이상 obj-c를 사용하지 않을 때 더 나은 옵션이 생겼습니다 ...

[sender view]

다음과 같이 사용하십시오.

UITapGestureRecognizer * objTapGesture = [self createTapGestureOnView:myTextField];

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

//이 메소드 추가

-(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;
}

참고 URL : https://stackoverflow.com/questions/2788870/find-which-child-view-was-tapped-when-using-uitapgesturerecognizer

반응형