2016-11-04 30 views
0

プログラムでビューコントローラを作成し、ビューコントローラの上半分にサブビューを追加しました。しかし、私がサブビューにタップジェスチャーを追加しようとすると、タップを認識していないようです。サブビュー(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

サブビューで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 *)タッチ {IF([touch.viewのisDescendantOfView:yourSubView]){ リターンNO。 } return YES; } – User511

関連する問題