UIImageView
カスタム セルの init メソッド内にジェスチャ レコグナイザーをフックすることをお勧めします。
// Add recognizer for tappable image
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewTapped:)];
[tapRecognizer setNumberOfTouchesRequired:1];
[tapRecognizer setDelegate:self];
self.tappableImageView.userInteractionEnabled = YES;
[self.tappableImageView addGestureRecognizer:tapRecognizer];
次に、ハンドラー:
- (void)imageViewTapped:(id)sender {
NSLog(@"image tapped");
self.tappableImageView.image = [UIImage imageNamed:@"some_different_image.png"];
}
また、カスタム セル宣言を次のように装飾することを忘れないでください。
@interface CustomTableViewCell : UITableViewCell <UIGestureRecognizerDelegate>
cellForRowAtIndexPath:
メソッドでは、 init メソッドのコードが起動され、tapRecognizer
が追加されるようにする必要があります。
幸運を!
[編集]
カスタム XIB を使用してセルを作成する方法によっては、これが必要ない場合もありますが、私の場合は、テーブル セルの UI の状態を初期化するメソッドを明示的に呼び出す必要がありました。initState
これを行う方法は、カスタム テーブル ビュー セルでメソッドを提供することです。
- (void)initState {
// Do other things for state of the UI in table cell.
// Add recognizer for tappable image
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(imageViewTapped:)];
[tapRecognizer setNumberOfTouchesRequired:1];
[tapRecognizer setDelegate:self];
self.tappableImageView.userInteractionEnabled = YES;
[self.tappableImageView addGestureRecognizer:tapRecognizer];
}
次に、作成後にテーブル セルcellForRowAtIndexPath
を呼び出すようにします。initState
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomTableViewCell *cell = (CustomTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:@"CustomTableViewCell" bundle:nil];
// Grab a pointer to the custom cell.
cell = (CustomTableViewCell *)temporaryController.view;
[cell initState];
}
return cell;
}