【问题标题】:tableView tag wrong after moveRowAtIndexPath methodmoveRowAtIndexPath 方法后 tableView 标记错误
【发布时间】:2013-07-25 09:26:20
【问题描述】:

我有一个包含 7 个 tableViews 的视图,代表一周中的 7 天。每个 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 方法之后使用了错误的标签。

谢谢大家!

【问题讨论】:

    标签: ios tags tableview


    【解决方案1】:

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

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

    【讨论】:

    • @Aniket Kote 你能告诉我,我什么时候应该在自定义单元格的标签上设置值?如果我将行从索引位置 4 移动到 0,则标签将更改为索引 4 行。
    【解决方案2】:

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

    【讨论】:

    • 我还应该提到我将长按应用于单元格,因为我将它用于其他内容。很抱歉之前没有提及
    • 什么“其他东西”?从表格到单元格比反过来更容易。
    • longPress 应用于 mainView 是因为它的内容发生了变化,但有一些共同的内容。我有这个 mainViewController ,它可以在其中获取适用于不同内容的 longPress 方法识别器。这就是为什么我根据当前的内容对已识别的 longPressed 视图进行“转换”
    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多