2011-06-29 12 views

答えて

11

使用UITapGestureRecognizerジェスチャーがUIViewから継承された任意のビューでタッチを検出します。

は、以下のように使用します.....

myImageViewビュー(UIImageViewのタイプ)にタップジェスチャーUITapGestureRecognizerを追加します。

UITapGestureRecognizer *myTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTapEvent:)]; 
myImageView.userInteractionEnabled = YES; 
[myImageView addGestureRecognizer:myTapGesture]; 
[myTapGesture release];  

gestureTapEvent:タッチイベントを受信する方法を実装します。 UPDATED

-(void)gestureTapEvent:(UITapGestureRecognizer *)gesture 
{ 

} 

を、あなたはあなたとビューにアクセスすることができUIGestureRecognizerviewプロパティを使用してジェスチャーを取り付けました。

@property(nonatomic, readonly) UIView *view; 

したがって、gestureTapEvent:メソッドは次のようになります。

-(void)gestureTapEvent:(UITapGestureRecognizer *)gesture 
{ 
    UIImageView* myImageView = (UIImageView*)gesture.view ; 
} 
+0

しかし、どの画像ビューがタップ方式でクリックされたのかわかりますか? – yosifz8

+0

@ yosifz8:更新された答えを確認してください... – Jhaliya

2

あなたはそのための複数の可能性がありますなど、touchesBegan:withEvent:メソッドをオーバーライドするためにあなたのImageViewの上UITapGestureRecognizer(私は、このソリューションをお勧めします)

  • サブクラスUIImageViewを追加する

    • 使用UIGestureRecognizerを
    • UIImageView上にUIButton(カスタムのタイプで、ボタンのフレームが描画されないように)を追加します。

    例:

    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewClicked:)]; 
    [cell.yourImageView addGestureRecognizer:gestureRecognizer]; 
    [gestureRecognizer release]; 
    

    [EDIT]

    あなたimageViewClickedメソッドを実装するときに、あなたがGestureRecognizerのviewプロパティを使用してタップImageViewのを得ることができます。 (あなたはtableView:cellForRowAtIndexPath:方法でそれに影響を与えた場合)

    • は(あなたがそれに影響を与えたものに応じてタグを取得し、あなたがそれをやりたいためにあなたのImageViewののタグを使用します、それから、あなたは、たとえばことができます開始たとえば、imageView.tag = indexPath.rowtableView:cellForRowAtIndexPath:に設定して、そのindexPath行を取得してください)
    • imageViewのsuperviewsからUITableViewCellまで移動し、indexPathを取得して取得したいものを尋ねます。

    例:

    -(void)imageViewClicked:(UITapGestureRecognizer*)gestRecognizer 
    { 
        UIImageView* iv = (UIImageView*)gestRecognizer.view; 
        NSInteger tag = iv.tag; // then do what you want with this 
    
        // or get the cell by going up thru the superviews until you find it 
        UIView* cellView = iv; 
        while(cellView && ![cellView isKindOfClass:[UITableViewCell class]]) 
         cellView = cellView.superview; // go up until you find a cell 
    
        // Then get its indexPath 
        UITableViewCell* cell = (UITableViewCell*)cellView; 
        NSIndexPath* indexPath = [self.tableView indexPathForCell:cell]; 
    } 
    
  • +0

    しかし、どの画像ビューがタップ方式でクリックされたのかわかりますか? – yosifz8

    +0

    indexPath.rowを追跡する必要があります – Maulik

    +1

    UIGestureRecognizer( 'imageViewClicked:'セレクタのパラメータとして渡される)の 'view'プロパティは、UIImageViewへのアクセスを提供します。次に、imageViewのタグを使用して、objetまたはindexPathに関連付けられているモデル(セルを返すときにタグを設定した場合)を追跡したり、親UITableViewCellを取得してindexPathを問い合わせたりできます。 (私はコードを与えるために私の答えを更新する) – AliSoftware

    0

    代わりにカスタムUIButtonを取り、ボタンに同じ画像を割り当て、あなたがそのボタンのtouchupInsideイベントを取得することができますUIImageViewの。 button.tag = indexpath.rowを割り当てるだけで、どのセルのボタンが押されたかを取得できます。

    -(IBAction)ButtonPressed:(id)sender{ 
        UIButton *btnSelected = sender; 
        switch(btnSelected.tag){ 
         case: 0 
         ///Cell 0's Button Pressed. 
         break; 
         ...... 
         ...... 
    } 
    

    このヘルプが必要です。その後、newTapMethod(または、これまで何あなたがそれに名前を付ける)を作成し、あなたの.mに

    UITapGestureRecognizer *newTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newTapMethod)]; 
    
    [_imageButtonName setUserInteractionEnabled:YES]; 
    
    [_imageButtonName addGestureRecognizer:newTap]; 
    

    を次の形式を使用UIImageViewにタッチイベントを追加するには

    0

    -(void)newTapMethod{ 
    //... 
    } 
    

    に役立ちます願っています。

    関連する問題