滑块更改会影响其他表格单元格

Posted

技术标签:

【中文标题】滑块更改会影响其他表格单元格【英文标题】:slider change affects other table cells 【发布时间】:2011-11-03 23:14:10 【问题描述】:

我的每个表格单元格都有一个滑块和一个标签来显示其值。如果我在保持单元格内的所有触摸的同时移动滑块,则标签会按预期更新。但是,如果在拖动滑块时,触摸跨越到另一个单元格,则第二个单元格的标签会在第一个单元格滑块的拇指移动时更新。如何将标签更改限制为滑块事件起源的第一个单元格?

-(IBAction)sliderChanged:(id)sender forEvent:(UIEvent*)event
    
    NSSet *allTouches = [event allTouches];
    UITouch *firstTouch = [[allTouches allObjects] objectAtIndex:0];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[firstTouch locationInView:self.tableView]];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    if (cell)
    
        UISlider *slider = (UISlider*)sender;
        UILabel *sliderValueLabel = (UILabel*)[cell viewWithTag:kSliderValueLabelTag];
        sliderValueLabel.text = [NSString stringWithFormat:@"%0.2f", slider.value];
    

【问题讨论】:

【参考方案1】:

您的代码对我来说看起来很合理,但为了保持一致,我会从“滑块”中获取单元格,而不是依赖于触摸点的坐标。可能是“allTouches”数组没有像您希望的那样返回原始印刷机。

为此,您需要获取滑块的 superView,然后使用它来获取 viewWithTag:。

假设滑块和标签包含在同一个视图中,您可以尝试以下操作:

UIView *cellContentView = slider.superView;
UILabel *sliderValueLabel = [cellContentView viewWithTag:kSliderValueLabelTag];

如果您不想依赖视图层次结构,您还可以在滑块上放置一个与表格中的行相对应的标签,然后使用它来拉出单元格。

【讨论】:

【参考方案2】:

当您移动滑块时,它会不断调用您的 sliderChanged 方法。在这种方法中,您更改了触摸所在单元格的标签,当您的触摸进入另一个单元格时,这是错误的单元格。

我会做什么:

    在扩展 UITableViewCell 的自定义类中声明 sliderChange 方法 将滑块操作链接到此方法,因为它在单元格中,所以您始终拥有正确的单元格 使用 self.label 方法更改此单元格的标签

您还可以:

    调用 ((MyUITableViewCell*)slider.superview).label(如果滑块是您单元格的直接子视图) 在第一次接触时,请记住全局变量中的正确单元格(因为在这里您每次都重新创建变量)

【讨论】:

以上是关于滑块更改会影响其他表格单元格的主要内容,如果未能解决你的问题,请参考以下文章

ListView 单元格翻译操作会影响其他单元格

iOS 应用程序在带有滑块的大量表格单元格上崩溃

Objective C UITableView - 更改单元格高度后表格单元格显示错误内容

如何连续更新一堆表格单元格上的滑块?

选择其中一个时更改其他表格视图单元格的数据

滑动 UITableViewCell 操作会影响表格视图中的每 4 个单元格,而不仅仅是目标单元格