我的每个表格单元格都有一个滑块和一个标签来显示其值。如果我在保持细胞内所有触摸的同时移动滑块,标签会按预期更新。但是,如果在拖动滑块时,触摸交叉到另一个单元格,则第二个单元格的标签会在第一个单元格滑块的拇指移动时更新。如何将标签更改限制为滑块事件源自的第一个单元格?
-(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];
}
}
答案 0 :(得分:0)
你的代码看起来很合理,虽然为了保持一致,我会从“滑块”获取单元格,而不是依赖于触摸点的坐标。可能是“allTouches”数组不会回到你想要的原始印刷机。
为此,您需要获取滑块的superView,然后使用它来获取viewWithTag:。
假设滑块和标签包含在同一视图中,您可以尝试类似:
UIView *cellContentView = slider.superView;
UILabel *sliderValueLabel = [cellContentView viewWithTag:kSliderValueLabelTag];
如果您不想依赖视图层次结构,您还可以在滑块上放置一个与表中行对应的标记,然后使用它来拉取单元格。
答案 1 :(得分:0)
移动滑块时,它会不断调用sliderChanged方法。在这种方法中,您可以更改触摸所在的单元格的标签,即当您的触摸进入另一个单元格时,这是错误的单元格。
我会做什么:
你也可以: