我用section创建tableView,我使用自定义单元格并以这种方式定义带有图像的复选框(UIImageView):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"cellIdentifier";
StandardCellWithImage *cell = (StandardCellWithImage *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
cell = [[StandardCellWithImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSeparatorStyleNone;
}
cell.checkbox.tag = indexPath.row;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didSelectedImageAtIndexPath:)];
tapGesture.numberOfTapsRequired = 1;
tapGesture.delegate = self;
[cell.checkbox addGestureRecognizer:tapGesture];
cell.checkbox.userInteractionEnabled = YES;
return cell;
}
在didSelectedImageAtIndexPath方法中,我使用:
- (void) didSelectedImageAtIndexPath:(id) sender {
UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag inSection:0];
}
但是我在这里只有一行而不知道哪一部分用户点击这一行。有没有可能认出来?
答案 0 :(得分:2)
如果您在view.tag中编码项目/部分,如下所示:
view.tag = indexPath.section * kMAX_SECTION_SIZE + indexPath.item;
然后你可以这样做:
- (void) didSelectedImageAtIndexPath:(id) sender {
UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag % kMAX_SECTION_SIZE
inSection:int(gesture.view.tag / kMAX_SECTION_SIZE)];
}
答案 1 :(得分:1)
不要在cellForRowAtIndexPath中的复选框(单元格中的按钮)上添加手势,而是在单元格(StandardCellWithImage)中实现按钮操作,并从那里调用委托。
注意:强>
您可以在单元格中存储对tableView的弱引用,您可以在表格的dataSource的-tableView:cellForRowAtIndexPath:中设置它。这是更好的,因为依赖self.superview始终完全是tableView是脆弱的。谁知道Apple将来如何重新组织UITableView的视图层次结构。