首页 文章

当UISlider值更改时,单元格不更新值

提问于
浏览
4

我有一个让我发疯的问题 . 它是关于实时更新UITableViewCell,其中UISlider的值位于另一个UITableViewCell中 .

问题

单元格已更新但似乎单元格中Label的大小不会增加所表示值的大小 . 我会尝试更好地解释 .

UISlider的minimumValue为-100,最大值为100.因此,第一次加载TableView时, cell.detailText.text 显示0.0%女巫显示正常,但是当我移动滑块并且值更大时,例如55.5 %,标签无法保存此额外字符并显示"55....."

这就是我创建保存de UISlider的单元格的方法Value在cellForRowAtIndexPath委托方法中创建UISlider


cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ProductCellIdentifier] autorelease];
cell.textLabel.text=@"Performance";
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f%%", slider.value];
cell.tag=1002;

这就是我在cellForRowAtIndexPath方法中创建de UISlider的方法:


cell = [[[UITableViewCellalloc] initWithFrame:CGRectZero                                                           reuseIdentifier:ProductCellIdentifier] autorelease];

slider = [[UISlideralloc] initWithFrame:CGRectMake(90, 12, 200, 25)];

slider.maximumValue = 100;
slider.minimumValue = -100;
slider.continuous = TRUE;

[slideraddTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];

[cell.contentView addSubview:slider];
cell.tag=0;
[slider release];

这就是我在sliderChanged方法中所做的,以便更新单元格 .


UITableViewCell *celda= (UITableViewCell *)[[self tableView] viewWithTag:1002];
celda.detailTextLabel.text = [NSString stringWithFormat:@"%.1f%%", slider.value];

我怀疑解决方案是关于使用UITableView的reloadData方法但不确定 . 我试过在sliderChanged方法中插入一个 self.tableView.reloadData 但是我得到了UISlider没有移动,最后我得到了这个异常:
由于未捕获的异常终止应用'NSRangeException',原因:' -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

在此先感谢您的帮助
哈维

3 回答

  • 1

    问题是detailTextLabel宽度是固定的,只有在要在单元格中绘制标签时才计算 . 因此,当您使用“0.0%”初始化标签时,恰好有4个字符的空间,并且您无法正确显示任何超过该标签的内容;额外的字符要么用“......”修剪,要么标签不显示任何东西 .

    我解决了这个问题,强制标签在字符串的开头包含额外的空格,如下所示:

    while ([string length] <= 4)
          string = [NSString stringWithFormat:@" %@",prestring];
    cell.detailTextLabel.text = string;
    

    通过这种方式,我的滑块可以正确显示0到999之间正确的数字;因为你有更多的字符只需调整所需的长度 .

  • 1

    为什么在更新单元格时使用 currencyStyleStringFromNumber: 's value? I would think you' d使用与第一次将滑块的值放入单元格时相同类型的初始化程序获得更好的结果,即:

    cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f%%", slider.value];
    
  • 0

    您访问单元格的方式(通过标记)可能无法获得您期望的单元格 . 你最初没有分配标签1002吗?检查 celda 的值 . 然后,只需要检查,将单元格标签的值设置为不那么模糊的东西 .

相关问题