Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UISlider添加到UITableViewCell中的怪异行为_Ios_Objective C_Uitableview_Uislider - Fatal编程技术网

Ios UISlider添加到UITableViewCell中的怪异行为

Ios UISlider添加到UITableViewCell中的怪异行为,ios,objective-c,uitableview,uislider,Ios,Objective C,Uitableview,Uislider,我在故事板的单元格中添加了一个滑块。在cellforrowatinexpath:中,我获取滑块并以编程方式向滑块的拇指添加标签,然后返回单元格。代码如下 UISlider *forceDelaySlider = (UISlider *)[cell1 viewWithTag:102]; forceDelaySlider.minimumValue = 0.0; forceDelaySlider.maximumValue = 10.0; forceDelaySlider.value = [Settin

我在故事板的单元格中添加了一个滑块。在
cellforrowatinexpath:
中,我获取滑块并以编程方式向滑块的拇指添加标签,然后返回单元格。代码如下

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,
现在,当表格显示时,在表格加载后,滑块上的标签不会出现。它显示得很简单,如下所示

上下滚动tableview后,带标签的滑块显示如下


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

当第一次加载单元格时,
[cell1 viewWithTag:102]
[forceDelaySlider.subviews lastObject]
是否返回
nil
视图?最有可能的是,这两个选项中的一个在布局或渲染过程之后才存在



与其假设
[forceDelaySlider.subviews lastObject]
始终是拇指的
UIImageView
,不如将
UISlider
子类化,并添加自己的
UILabel
子视图。然后可以根据从中返回的值更改其位置。在未来的iOS版本中,苹果对
UISlider
类进行任何重构后,此实现都不会失效。

我不知道这是否能解决您的问题,但最好在自定义单元格的init方法中添加带标签的滑块。您应该只需要添加目标操作,并在CellForRowatineXpath中设置滑块和标签的值。这会使控制器上的代码更清晰,而且无需检查您的单元格中是否已经有滑块。@rdelmar我感觉您的建议会work@rdelmar我将尝试一下,并再次告诉您,我尝试过对UISlider进行子类化,并通过覆盖UIlabel并使用相同的代码在子视图中添加标签,在init方法中添加UIlabel。它仍然提供相同的效果,没有变化。但是,您还提出了使用thumbRectForBounds:trackRect:value:的其他建议,效果非常好。我只是想通过将它添加为thumb的子视图来实现,因为不需要编写任何代码来调整标签的框架(有些代码是行不通的)。