我有一个代表一周中 7 天的 7 个 tableViews 的视图。每个 tableView 都使用从 0 到 6 的标记进行初始化。我在单元格中制作了一个 longPressure 识别器以访问正确的 tableView:
- (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 的表中移动行。然后只是带有标签 5 的 longPress 表。然后回到标签 2 的 longPress 表,但这次将记录标签 = 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 方法之后使用了错误的标签。
谢谢你们!