2
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  UITouch *touch = [touches anyObject];
  NSLog(@"The tag %i",touch.view.tag);
  if( [touch.view isKindOfClass:[UIScrollView class]] ) {
    for( UIView *checkview in [self.view subviews] ) {
      if( [checkview tag] == 1 ) {
        infoIsVisibile = NO;
        [info removeFromSuperview];                         
      }
    }
  }
  [super touchesBegan:touches withEvent:event];
}

誰かが私を助けてくれますか?これはサブビュー内のタッチのみを検出し、メインビューは検出しません。

4

1 に答える 1

2

UIGestureRecognizerを関心のあるビューに接続できます。

(一般に、ジェスチャレコグナイザーは、任意のビューでタッチを検出するためのはるかに堅牢なメカニズムであり、従来のタッチイベントを消費する傾向があるUIWebViewsやUIScrollViewsなどのビューでうまく機能します。)

スニペットは次のとおりです。

UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
        initWithTarget:self action:@selector(handleSingleDoubleTap:)];
    singleFingerDTap.numberOfTapsRequired = 2;
    [self.theView addGestureRecognizer:singleFingerDTap];
    [singleFingerDTap release];

(このコードは、以下のリンクされたドキュメントからのものです。self.theViewは、おそらく現在のオブジェクトのメンバーとして保存されているランダムなビューであることに注意してください。)

ジェスチャレコグナイザーがコードを単純化し、奇妙さを軽減することに、あなたは喜んで驚かれることでしょう(またはショックを受けるでしょう)。

Appleのドキュメントへのリンクは次のとおりです。

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizers/GestureRecognizers.html

于 2012-06-07T00:51:50.110 に答える