UISlider添加了一个UITableViewCell奇怪的行为

时间:2015-04-17 15:38:10

标签: ios objective-c uitableview uislider

我在故事板中添加了一个滑块添加到单元格中。在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,

现在当表格出现时,滑块上的标签在表格加载后不会出现。它显示如下:

Plain slider

在向上和向下滚动桌面视图后,带有标签的滑块如下所示 Slider with label

为什么会这样?我被卡住了。请帮我解决这个奇怪的行为。

1 个答案:

答案 0 :(得分:1)

首次加载单元格时,[cell1 viewWithTag:102][forceDelaySlider.subviews lastObject]会返回nil视图吗?很可能两个中的一个在布局或渲染通过之后才存在。

不要假设[forceDelaySlider.subviews lastObject]始终是拇指的UIImageView,而应该将UISlider子类化,并添加自己的UILabel子视图。然后,您可以根据从thumbRectForBounds:trackRect:value:返回的值更改其位置。在未来的iOS版本中,Apple将对UISlider类进行任何重构后无法实现此实现。