0

私のシナリオでは、メインビューに多くのサブビューがあり、各サブビューをタップすると異なる結果が生成されるはずです。UITapGestureRecognizerはサブビューで呼び出されませんか?

私のアプローチは、メインビューが1つのタップレコグナイザを持ち、ユーザがタップしたサブビューの領域を計算するのではなく、独自のタップレコグナイザを実装することです。 ?

私はこのアプローチを試みましたが、うまくいかないようです。タップメソッドは決して呼び出されません。私はstackoverflowに関する記事をたくさん読んだが、彼らは役に立たなかった。

たとえば、サブビューはイメージビューではありませんが、私は手作業でそのuserInteractionEnabledプロパティをYESに手動で設定しました。しかし、それは役に立たなかった。以下

サブビューの主なコードである:

- (void) handleOneTap:(UITapGestureRecognizer*)paramSender{ 
// *** Never gets called 
NSUInteger touchCounter = 0; for (touchCounter = 0; 
            touchCounter < paramSender.numberOfTouchesRequired; 
            touchCounter++){ 
    CGPoint touchPoint = [paramSender locationOfTouch:touchCounter 
               inView:paramSender.view]; 
    NSLog(@"Touch #%lu: %@", 
      (unsigned long)touchCounter+1, NSStringFromCGPoint(touchPoint)); 
    } 
} 

- (void)viewDidLoad { 
[super viewDidLoad]; 

_container = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 280, 300)]; 
[self.view addSubview:_container]; 

_container.backgroundColor = [UIColor redColor]; 
_container.opaque = YES; 

// setup tap recognizer 
self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] 
          initWithTarget:self 
          action:@selector(handleOneTap:)]; 
self.tapGestureRecognizer.numberOfTouchesRequired = 1; 
self.tapGestureRecognizer.numberOfTapsRequired = 1; 
self.view.userInteractionEnabled = YES; 
self.container.userInteractionEnabled = YES; 
[self.view addGestureRecognizer:self.tapGestureRecognizer]; 
} 

任意の助けが理解されるであろう。

+0

解決する必要があります://www.dropboxを。 com/s/9qk892k7hbil2ub /%20Tap%20Gestures.zip?dl = 0を検出しています。もし誰かが一見することができればそれは大いに感謝されるだろう。 –

答えて

0

あなたがサブビューにUIGestureRecognizerを追加したい場合は、あなたがそのようにそれを実行する必要があります。

_container = [[UIView alloc] initWithFrame:CGRectMake(20, 50, 280, 300)]; 
[self.view addSubview:_container]; 

_container.backgroundColor = [UIColor redColor]; 
_container.opaque = YES; 
_container.userInteractionEnabled = YES; 

self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleOneTap:)]; 
self.tapGestureRecognizer.numberOfTouchesRequired = 1; 
self.tapGestureRecognizer.numberOfTapsRequired = 1; 
self.view.userInteractionEnabled = YES; 


[_container addGestureRecognizer:self.tapGestureRecognizer]; 
+0

ありがとうございました。私は_container.userInteractionEnabled = YESを移動しました。ステートメントをアップし、addGestureRecognizerを呼び出す_containerにself.viewを変更しましたが、それでも動作しませんでした。 –

+0

私はhttps://www.dropbox.com/s/9qk892k7hbil2ub/Detecting%20Tap%20Gestures.zip?dl=0で簡単なレシピを作成しました。あなたはそれを見てみることができますか?どうもありがとう。 –

+0

私は数分でそれを見るでしょう。 – Konstantin

0

という問題がUITapGestureRecognizerで、しかし、あなたはViewControllerをからサブビューを追加する方法の場合にはないように見えます。 subviewcontollerを追加する

正しい方法は次のとおりです。

SSubViewController *pvc = [SSubViewController controllerWithSubViewID:0]; 
[self.view addSubview:pvc.view]; 
[self addChildViewController:pvc]; 

はあなたのViewControllerでそれを行うと、それはあなたの問題私がhttpsで非常に単純化されたREPROサンプルを追加しました

+0

ありがとう、あなた!これは、問題解決のために役立ちました。実際のプロジェクトでタッピング問題全体を修正しようとしたときに別の問題が発生したため、以前に戻っていませんでした。私は別の投稿で他の問題をhttp://stackoverflow.com/questions/37922429/uitapgesturerecognizer-only-triggered-for-starting-area-of-uiscrollviewで尋ねました。もしあなたが時間があれば、あなたも見てみることができればそれは評価されるでしょう! –

+0

役立つ場合は、正解としてください。それは他人を助けることができます。 – Konstantin