我有一个视图,其中7个tableView代表一周中的7天。每个tableView都使用0到6的标记进行初始化。我在单元格中创建了一个longPressure识别器,以访问正确的表格。
- (IBAction)longPress:(UIGestureRecognizer *)sender {
self.clickedPoint = [sender locationInView:self.view];
// get most down subView user clicked
UIView *clickedSubView = [self.view hitTest:self.clickedPoint withEvent:nil];
if( [clickedSubView.superview isKindOfClass:[customCell class]] ) {
// get selected tableView
UITableView *selectedTableView = (UITableView*)clickedSubView.superview.superview;
NSLog(@"Selected tag: %d", selectedTableView.tag);
}
}
当我按下单元格时,标签会正确显示。问题是当我在tableView中移动行时。当我在tableView和longPress中执行moveRowAtIndexPath:时,我在其中创建moveRow的tableView的标记总是获取另一个tableView的最后一个longPress的标记。
示例:
我在表格中使用标签2 moveRow。然后只使用带有标签5的longPress表。然后返回标签2的longPress表,但这次将记录tag = 5(之前的那个)。如果longPress表带有标签1,则再次返回longPress“标签2表”(假设为),并将标签1记录在标签2的位置。
我已经读过,beginUpdates会丢失标记,这是重新加载所必需的。所以我试过这个:
// reload the tableView after moveRowAtIndexPath method
selectedTableView reloadData];
// also tried refresh the view that contains all the tableViews
[[self getWeekView] setNeedsDisplay];
// and also tried to set the tag again after moveRowAtIndexPath method
selectedTableView.tag = index;
没有任何作用。我还怀疑是否发生了clickedSubView的事情,如果我得到了正确的hitTest视图,但是我用彩色边框测试了它,它得到了正确的视图,只有在moveRowAtIndexPath方法之后使用了错误的标记。
谢谢大家!
答案 0 :(得分:1)
如果您使用自定义单元格查看表格视图,我想您正在使用,那么只需在自定义单元格上添加一个标签,或者如果您不想显示该标签,请将其隐藏。
当您将 - (UITableViewCell *)中的数据加载到tableview单元格时:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法只有你设置标签标签的时间才能得到这个标签问题。
答案 1 :(得分:0)
如果要获取长按的表视图,请将手势识别器添加到表视图本身(而不是单元格)。然后,您只需使用sender.view
请求视图即可。如果需要,您仍然可以进行命中检测以获得实际上长时间按下的视图。