4

次のコードに示すように、テーブルビューが引き伸ばされると(スクロールアップしない)、NSLog(@"tap is not on the tableview cell")常に呼び出されます(indexPath は常に nil になると思っていたので)。しかし、セクション番号が 2 より大きいセクション ヘッダーでアバターをタップすると、NSLog呼び出されません。奇妙だ、ここで何が起こっているか知っている人はいますか?

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
 ...
     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
     tapGesture.numberOfTapsRequired = 1;
     [avatar addGestureRecognizer:tapGesture];
     //avatar is UIImageView and the user interaction is enabled.
     [headerView addSubview: aMessageAvatar];
     return headerView;
 ...

}


-(void)handleTapGesture:(UITapGestureRecognizer *)sender
{
    CGPoint point = [sender locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
    if (!indexPath) {
    NSLog(@"tap is not on the tableview cell");
    }
}
4

1 に答える 1

2

タップ位置はセルではなくヘッダー内の位置であるため、 cell と一致することはありませんindexPath

ビューの を でセクション番号に設定し、tagでセクション番号を取得できます。例えば:avatarviewForHeaderInSectionhandleTapGesturesender.view.tag

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
 ...
     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
     tapGesture.numberOfTapsRequired = 1;
     avatar.tag = section;                // save the section number in the tag
     avatar.userInteractionEnabled = YES; // and make sure to enable touches
     [avatar addGestureRecognizer:tapGesture];
     //avatar is UIImageView and the user interaction is enabled.
     [headerView addSubview: aMessageAvatar];
     return headerView;
 ...

}

-(void)handleTapGesture:(UITapGestureRecognizer *)sender
{
    NSInteger section = sender.view.tag;
    NSLog(@"In section %d", section);
}
于 2013-06-05T17:26:20.270 に答える