在touch上区分accessoryView和Row

时间:2015-10-07 11:41:55

标签: ios objective-c accessory

如果用户点击表格单元格中的附件图像而不是行,我希望用户获得不同的结果。

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

- (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"]]];

}

覆盖标准附件按钮并显示图像。注意:无论在故事板中设置披露指标,没有,勾选标记,披露指标等,它都会显示图像。

然而,目前,

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

方法没有解雇。

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

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

2 个答案:

答案 0 :(得分:3)

您可以通过

在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...
}    

希望有所帮助

答案 1 :(得分:2)

即使在正文开始之前,也要在方法签名中观察;

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

作为Apple Documentation的旁注:

  

讨论代表通常会回应披露内容   按钮(附件视图)通过显示与该相关的新视图   选定的行。设置附件视图时不调用此方法   对于indexPath的行。

此方法用于识别披露指标上的触摸,而不是附件视图。

为了支持您的附件视图触摸,请创建自定义UITableViewCell并在附件视图中添加UITapGestureRecognizer以拦截水龙头。