web-dev-qa-db-ja.com

UITableViewCellのUIImageViewの認識をタップします

現在問題に直面しています。UITableViewCellのUIImageViewがタップされたときにアクションを実行したいと思います。

質問:どうすればよいですか?誰かがコードやチュートリアルを見せてもらえますか?

前もって感謝します!

25
Anatoliy Gatt

これは実際には思っているより簡単です。 imageViewでユーザー操作を有効にする必要があり、それにタップジェスチャーを追加できます。これは、セルがインスタンス化されたときに、同じ画像ビューに複数のタップジェスチャーが追加されないようにする必要があります。例えば:

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapMethod:)];

        [self.imageView addGestureRecognizer:tap];
        [self.imageView setUserInteractionEnabled:YES];
    }

    return self;
}

- (void)myTapMethod:(UITapGestureRecognizer *)tapGesture
{
    UIImageView *imageView = (UIImageView *)tapGesture.view;
    NSLog(@"%@", imageView);
}
45
Mick MacCallum

これを試して

//within cellForRowAtIndexPath (where customer table cell with imageview is created and reused)
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImageTap:)];
tap.cancelsTouchesInView = YES;
tap.numberOfTapsRequired = 1;
[imageView addGestureRecognizer:tap];

// handle method
- (void) handleImageTap:(UIGestureRecognizer *)gestureRecognizer 
{
    RKLogDebug(@"imaged tab");
}

あなたが持っていることを確認してください...

imageView.userInteractionEnabled = YES;
6
WaaleedKhan

uIImageViewの代わりにcustomButtonを使用できます

3
iArezki

タップジェスチャー認識機能はメモリを大量に消費する可能性があり、ページ上の他のものが壊れる可能性があります。カスタムテーブルセルを作成し、カスタムセルフレームにボタンを挿入し、テーブルビューコードでself.customtablecell.background.imageに必要な画像を設定することを個人的にお勧めします。このように、ボタンにIBactionを割り当てて、任意のビューにプッシュすることができます。

0
Bradley

ALActionBlocks を使用してブロックでアクションを実行します

__weak ALViewController *wSelf = self;
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithBlock:^(UITapGestureRecognizer *weakGR) {
    NSLog(@"pan %@", NSStringFromCGPoint([weakGR locationInView:wSelf.view]));
}];
[self.imageView addGestureRecognizer:gr];
0
dimo hamdy