区分accessoryView和Row on touch

Distinguish between accessoryView and Row on touch

如果用户单击 table 单元格而不是行中的附件图像,我希望他们得到不同的结果。

为了捕捉他们对配件的点击,我使用了以下方法:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
NSLog(@"accessory button tapped");
  }

此外,我没有使用标准指标。相反,我使用自定义图像如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 [cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]]];

}

覆盖标准附件按钮并显示图像。注意:无论情节提要中设置的披露指示符、none、复选标记、披露指示符等是什么,它都会显示图像

但是,目前

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
NSLog(@"accessory button tapped");
  }

方法未触发。

SO 上有一些 answers 建议如果附件是附件视图而不是附件类型,则不会调用此方法。

有谁知道是否可以使用自定义图像并仍然使用点击按钮的方法来触发?

您可以通过

在 UIImageView 上添加标签手势
UIImageView *imgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
imgView.tag = indexPath.row;
UITapGestureRecognizer *tapGesture1 = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(tapGesture:)];
tapGesture1.numberOfTapsRequired = 1;
[tapGesture1 setDelegate:self];
[imgView addGestureRecognizer:tapGesture1];
[cell setAccessoryView:];

并添加选择器方法

- (void) tapGesture: (id)sender
{
    //handle Tap...
}    

希望对您有所帮助

甚至在正文开始之前就在您的方法签名中观察 ;

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
}

作为 Apple Documentation 的旁注:

Discussion The delegate usually responds to the tap on the disclosure button (the accessory view) by displaying a new view related to the selected row. This method is not called when an accessory view is set for the row at indexPath.

此方法用于识别公开指示器上的触摸,而不是辅助视图上的触摸。

为了支持您的辅助视图触摸,创建自定义 UITableViewCell 并在您的辅助视图上添加一个 UITapGestureRecognizer 以拦截点击。