滑块更改会影响其他表格单元格
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(如果滑块是您单元格的直接子视图)
在第一次接触时,请记住全局变量中的正确单元格(因为在这里您每次都重新创建变量)
【讨论】:
以上是关于滑块更改会影响其他表格单元格的主要内容,如果未能解决你的问题,请参考以下文章