我使用下面的代码来检测对UITableView的点击,并根据单击哪个单元格和单元格中的哪个元素进行操作,并对任何不匹配的元素执行默认操作。如何在表格末尾添加indexPath为空格的第一个单元格的indexPath?
-(void)addTapRecognizer {
// this is called when the view is created
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.delegate = self;
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:singleTap];
}
- (void)handleTap:(UITapGestureRecognizer *)tap {
NSLog(@"tap detected!");
if (UIGestureRecognizerStateEnded != tap.state) {
return;
}
UITableView *tableView = (UITableView *)tap.view;
CGPoint p = [tap locationInView:tap.view];
NSIndexPath* indexPath = [tableView indexPathForRowAtPoint:p];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
NSLog(@"selectedIndex = %ld", (long)indexPath.row);
// take action depending where the cell was clicked
// with a default action if no element matches
MyTableViewCell *cell = (MyTableViewCell *) [self.tableView cellForRowAtIndexPath:indexPath];
CGPoint pointInCell = [tap locationInView:cell];
if(CGRectContainsPoint(cell.someImage.frame,pointInCell)) {
[self openItemID:[ItemList[indexPath.row] valueForKey:ID_ITEM]];
return;
}
if (...) {
...
return;
}
[self openItemID:[ItemList[indexPath.row] valueForKey:ID_ITEM]];
return;
}
我的问题是,当没有足够的细胞,以填补屏幕(所以例如表包含2个细胞,然后在下面空格),当最后一个单元格下方的用户点击,这是处理作为第一个单元格的点击(控制台在两种情况下都会记录“selectedIndex = 0”)。
有没有办法区分这种点击在表格末尾的空白处和单击表格的“正确”单元格之间的区别?
我想知道在这种情况下'indexPath'' nil'。我不会奇怪,'nilIndexPath.row'值为0. – Larme
Ooh ... spot on,我不认为nil.row会给0,indexPath是零而不是。谢谢!虽然我仍然对Gordonium的答案感兴趣,这似乎是一个更清晰的方法来做到这一点 – user14764
显然,只需要检测'UITableViewCell'上的选择必须使用'tableView:didSelectRowAtIndexPath:'完成。但有些人有时想在他们身上添加多个手势,所以你的问题似乎是合法的。 – Larme