0

我有一个代表一周中 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 方法之后使用了错误的标签。

谢谢你们!

4

2 回答 2

1

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

当您将在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中加载带有数据的表格视图单元格时,只有您设置标签标签,这样您就不会遇到标签问题。

于 2013-07-25T09:33:50.613 回答
0

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

于 2013-07-25T09:32:50.480 回答