2016-11-04 15 views
0

나는 프로그램 적으로 viewcontroller를 생성하고 뷰 컨트롤러의 상반부에 하위 뷰를 추가했습니다. 그러나 내 하위보기에 탭 제스처를 추가하려고하면 탭을 인식하지 못하는 것 같습니다. 하위보기 (menuSubView) 포인터를 탭하면 - (void) tapGestureMethod가 호출되지 않습니다.UITapGestureRecognizer가 탭을 인식하지 못함

다음은 당신이 문제가 무엇인지 말하기 어렵다 전송 코드에서 내 코드 -

UITapGestureRecognizer *tapMenuSubView=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureMethod:)]; 
    tapMenuSubView.numberOfTapsRequired=1; 
    tapMenuSubView.numberOfTouchesRequired=1; 
    tapMenuSubView.delegate=self; 
    self.view.userInteractionEnabled=YES; 
    self.menuSubView.userInteractionEnabled=YES; 
    [self.menuSubView addGestureRecognizer:tapMenuSubView]; 
} 
-(void)tapGestureMethod:(UITapGestureRecognizer *)gesture{ 
    UIView *tapView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.view addSubview: tapView]; 
} 
+1

기본보기에 self.menuSubView를 추가 한 곳은 어디입니까? –

+0

subview에서 isUserInteractionEnabled를 확인하십시오. 사용할 수 있어야합니다. – Jeyamahesan

+0

viewdidLoad 메서드 자체에 추가했습니다. –

답변

0

입니다. 우리는 모른다. menuSubView의 클래스 안에 무엇이 있는가. menuSubView 등을 어떻게 만듭니 까?

나는 모르는 사이에 일시적으로 tapMenuSubView.delegate=self;을 제거 할 것을 제안한다. 그것은 당신의 논리에 달려 있지만, 기본적인 경우에, 당신은 제스쳐 인식자를 작동시키기 위해 델리게이트를 필요로하지 않습니다.

도움이되지 않는다면, 나는 도청을 가로 채지 않도록 menuSubView의 설정을 자세히 살펴볼 것입니다. 어쩌면, 그것을 감추고있는 보이지 않는 시각이있을 수 있습니다. 또는 문제를 일으킬 수있는 다른 제스처 인식기.

UPDATE

문제는이 방법에있다.

- (IBAction)menuButton:(id)sender { 
    MenuViewViewController *menuViewObj=[[MenuViewViewController alloc]init]; 
    menuViewObj.view.frame=CGRectMake(0, 0, self.view.frame.size.width-80, self.view.frame.size.height); 

    [menuViewObj.view setBackgroundColor:[UIColor whiteColor]]; 
    [self.view addSubview:menuViewObj.view]; 
} 

당신은 제대로 ViewControllerMenuViewViewController을 포함하지 않습니다. This tutorial 도움이됩니다.

- (void)displayContentController:(UIViewController *) content { 
    [self addChildViewController:content]; 
    content.view.frame = [self frameForContentController]; // set any frame you like 
    [self.view addSubview:self.currentClientView]; 
    [content didMoveToParentViewController:self]; 
} 
+0

https://www.dropbox.com/s/tgdrocl5zaqnpst/ViewController.m?dl=0 –

+0

https://www.dropbox.com/s/fh1a399a614pjj6/ViewController.h?dl= 0 –

+0

https://www.dropbox.com/s/eu6v1ir0fqzquba/MenuViewViewController.m?dl=0 –

0

코드에 추가해보십시오.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
    { 
    return YES; 
    } 

희망이 도움이됩니다.

+0

아니요, 작동하지 않습니다. 위의 파일 링크를 게시했습니다. 또한 가능한 시나리오를 살펴 보시기 바랍니다. 감사합니다 –

0
You are adding on menuSubview. Either add it on self.view or try to get it from menuSubview. 

    UITapGestureRecognizer *tapMenuSubView=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureMethod:)]; 
    tapMenuSubView.numberOfTapsRequired=1; 
    tapMenuSubView.numberOfTouchesRequired=1; 
    tapMenuSubView.delegate=self; 
    self.view.userInteractionEnabled=YES; 
    [self.view addGestureRecognizer:tapMenuSubView]; 
} 

-(void)tapGestureMethod:(UITapGestureRecognizer *)gesture{ 
    UIView *tapView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.view addSubview: tapView]; 
} 
+0

나는 또한 그걸 시도했지만 작동하지 않습니다. –

+0

self.view에 대한 다른 견해를 갖고 있습니까? – User511

+0

그렇다면 자체 객체 내에 UIGestureRecognizerDelegate 프로토콜을 채택하고 아래의 메소드를 호출하여 뷰를 확인해야합니다. 이 방법에서는 touch.view에 대한보기를 확인하고 적절한 bool (Yes/No)을 반환합니다. 이런 일 : - (BOOL) gestureRecognizer (UIGestureRecognizer *) gestureRecognizer shouldReceiveTouch (UITouch *) 터치 { 경우 ([touch.view의 isDescendantOfView : yourSubView]) { 복귀 NO; } return 예; } – User511

관련 문제