UITableViewの中でUITapGestureRecognizerを使っていたのですが、
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
が反応しなかったのでメモ。
NGだったコード
// SampleTableViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
/**
* これだと didSelectRowAtIndexPath: が反応しない
*/
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableViewDidTap:)];
[self.tableView addGestureRecognizer:tapGesture];
}
動いたコード
/**
* SampleTableViewController.h
*/
@interface SampleTableViewController : UIViewController <UITableViewDelegate, UIGestureRecognizerDelegate>
// ~~~~~~~~~~~~~~~~~~~~~~~~
/**
* SampleTableViewController.m
*/
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tableViewDidTap:)];
tapGesture.delegate = self; // これを追加
[self.tableView addGestureRecognizer:tapGesture];
}
# pragma mark - UITapGestureRecognizer Delegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// UITapGestureが受け取っていい(= tableViewDidTap: が実行されていい)場合に YESを返す
return [self canReceiveTouch];
}