moveRowAtIndexPath方法后tableView标记错误

时间:2013-07-25 09:26:20

标签: ios tags tableview

我有一个视图,其中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方法之后使用了错误的标记。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

如果您使用自定义单元格查看表格视图,我想您正在使用,那么只需在自定义单元格上添加一个标签,或者如果您不想显示该标签,请将其隐藏。

当您将 - (UITableViewCell *)中的数据加载到tableview单元格时:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法只有你设置标签标签的时间才能得到这个标签问题。

答案 1 :(得分:0)

如果要获取长按的表视图,请将手势识别器添加到表视图本身(而不是单元格)。然后,您只需使用sender.view请求视图即可。如果需要,您仍然可以进行命中检测以获得实际上长时间按下的视图。