4

我有一个让我发疯的问题。这一切都是关于实时更新一个 UITableViewCell,它具有另一个 UITableViewCell 内的 UISlider 的值。

问题

单元格已更新,但似乎单元格中标签的大小不适合表示的值的大小。我会尽力解释得更好。

UISlider 的最小值为 -100,最大值为 100。因此,第一次加载 TableView 时,cell.detailText.text显示 0.0% 女巫显示正常,但是当我移动滑块并且值更大时,例如 55.5%,标签不能容纳这个多余的字符并显示“55.....”

这就是我创建包含 de UISlider 值的单元格的方式 在 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方法,但不确定。我尝试self.tableView.reloadData在sliderChanged方法中插入a,但后来UISlider没有移动,最后我得到了这个异常:
由于未捕获的异常'NSRangeException'而终止应用程序,原因:'-[NSCFArray objectAtIndex:]:超出索引(0)界限(0)'

提前感谢您的帮助
Javi

4

3 回答 3

1

为什么currencyStyleStringFromNumber:在更新单元格的值时使用?我认为使用与第一次将滑块的值放入单元格时相同的初始化程序可以获得更好的结果,即:

cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f%%", slider.value];
于 2009-08-30T10:10:59.510 回答
1

您访问单元格的方式(按标签)可能无法获得您期望的单元格。您最初不是分配了标签 1002 吗?检查 的值celda。然后,只是为了检查,将单元格标签的值设置为不那么模糊的值。

于 2009-08-30T12:01:40.613 回答
0

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

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

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

这样,我的滑块可以正确地可视化 0 到 999 之间的数字;因为您有更多字符,所以只需调整所需的长度。

于 2010-06-27T15:44:37.373 回答