我在故事板中添加了一个滑块添加到单元格中。在cellForRowAtIndexPAth:
中,我获取滑块并以编程方式向滑块的拇指添加标签,然后返回单元格。代码如下
UISlider *forceDelaySlider = (UISlider *)[cell1 viewWithTag:102];
forceDelaySlider.minimumValue = 0.0;
forceDelaySlider.maximumValue = 10.0;
forceDelaySlider.value = [Settings sharedInstance].forceDelay;
[forceDelaySlider addTarget:self action:@selector(forceDelaySliderChanged:) forControlEvents:UIControlEventValueChanged];
UIImageView *handleView = [forceDelaySlider.subviews lastObject];
if (forceDelaySliderLabel)
{
[forceDelaySliderLabel removeFromSuperview];
forceDelaySliderLabel = nil;
}
forceDelaySliderLabel = [[UILabel alloc] initWithFrame:handleView.bounds];
forceDelaySliderLabel.text = [NSString stringWithFormat:@"%0.0f", forceDelaySlider.value];
forceDelaySliderLabel.backgroundColor = [UIColor clearColor];
forceDelaySliderLabel.textAlignment = NSTextAlignmentCenter;
[forceDelaySliderLabel setTextColor:[UIColor blackColor]];
[handleView addSubview:forceDelaySliderLabel];
return cell1,
现在当表格出现时,滑块上的标签在表格加载后不会出现。它显示如下:
在向上和向下滚动桌面视图后,带有标签的滑块如下所示
为什么会这样?我被卡住了。请帮我解决这个奇怪的行为。
答案 0 :(得分:1)
首次加载单元格时,[cell1 viewWithTag:102]
或[forceDelaySlider.subviews lastObject]
会返回nil
视图吗?很可能两个中的一个在布局或渲染通过之后才存在。
不要假设[forceDelaySlider.subviews lastObject]
始终是拇指的UIImageView
,而应该将UISlider
子类化,并添加自己的UILabel
子视图。然后,您可以根据从thumbRectForBounds:trackRect:value:
返回的值更改其位置。在未来的iOS版本中,Apple将对UISlider
类进行任何重构后无法实现此实现。