Iphone 返回视图时iOS UISlider旋钮重影
在tableviewcell中,我有一个UISlider。如果我移动滑块旋钮,返回到我以前的视图,然后返回到表视图,滑块上的旋钮返回到零,但我看到了旋钮的“重影”,我之前也移动了滑块 我清除cellForRowAtIndexPath:中滑块对象的上下文视图,并在ViewDidDisplay中重新加载表 有人知道怎么解决这个问题吗?真烦人。我把滑块代码放在下面,如果有帮助的话Iphone 返回视图时iOS UISlider旋钮重影,iphone,objective-c,ios,uislider,Iphone,Objective C,Ios,Uislider,在tableviewcell中,我有一个UISlider。如果我移动滑块旋钮,返回到我以前的视图,然后返回到表视图,滑块上的旋钮返回到零,但我看到了旋钮的“重影”,我之前也移动了滑块 我清除cellForRowAtIndexPath:中滑块对象的上下文视图,并在ViewDidDisplay中重新加载表 有人知道怎么解决这个问题吗?真烦人。我把滑块代码放在下面,如果有帮助的话 // Setup slider CGRect sliderFrame = CGRectMa
// Setup slider
CGRect sliderFrame = CGRectMake(15, 56, 230, 0);
UISlider *slider = [[UISlider alloc] initWithFrame:sliderFrame];
slider.clearsContextBeforeDrawing = YES;
[slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged];
[slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:slider];
[slider release];
我很感激!谢谢 很可能您正在旧的
UISlider
上创建一个新的UISlider
,从而产生重影效果
两种可能的解决办法
UISlider添加到单元格时,标记它
UITableViewCell
并将UISlider
添加到其内容视图中,并使用ivar保留对其的引用UISlider添加到contentView时标记它。然后,当你再次得到一个单元格时,你可以尝试先取回视图,或者创建一个新的视图
const int sliderViewTag = 99;
UISlider *slider = [cell.contentView viewWithTag:sliderViewTag];
if (!slider) {
CGRect sliderFrame = CGRectMake(15, 56, 230, 0);
slider = [[UISlider alloc] initWithFrame:sliderFrame];
slider.clearsContextBeforeDrawing = YES;
[slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged];
[slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:slider];
[slider release]; slider = nil;
}
虽然2有点复杂,但它是我的首选方法,但我确信有一些很好的例子可以说明如何做到这一点。Apple提供了一些很棒的文档,请查看它们,特别是查看部分更仔细地查看表格视图单元格
您没有任何检查来查看是否已经绘制了滑块/您没有尝试获取以前绘制的滑块。我猜你只是在旧的滑块上画了一个新的滑块,因此你可以在背景中看到旧的滑块,它可能位于不同的位置。谢谢你的快速响应。这是有道理的,但是你怎么检查呢?是实际循环遍历单元的所有子视图以查看它们是否存在的最佳方法,如果它们没有创建它们,则只需更新它们即可?非常感谢Paul。这是我第一次尝试以编程方式添加子视图,因此我假设操作系统将负责重用子视图,而不是使用新的子视图来覆盖它们。