正如您在下面的代码中所看到的,我有一些tableView
的时间赛车手。第一个赛车有金圈(goldMedal
图像)第二个(s)有银色和第三个铜牌,其他人只有medal
个图像。 Theese图像只是金/银/青铜/黑色圆圈。我想在这个奖牌图像上加上一个UILabel
视图,其数字将在比赛中描述raecer的顺序,因此具有最佳(相同)时间的参赛者将拥有goldMedal
图像,编号为1它,第二个赛车将有silverMedal
图像,上面有数字2,依此类推。问题是当我在桌面视图中有太多的参赛者并向下滚动时,参赛者不会有相同的数字。滚动时,这些数字正在改变。我不知道该怎么做。任何人都可以帮助我吗?
此外,我使用helpIndex
变量来计算4或更差赛车手的数字,但现在有indexPath.row
并且两种方式都没有。任何人都可以给我至少他的观点,他将如何解决这个问题?感谢
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"SKSTableViewCell";
SKSTableViewCell *sksTableViewCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(sksTableViewCell.frame.origin.x+22.5, sksTableViewCell.frame.origin.y+20.5, 15, 15)];
numberLabel.font = [UIFont systemFontOfSize:12];
numberLabel.textColor = [UIColor whiteColor];
numberLabel.textAlignment = NSTextAlignmentCenter;
numberLabel.adjustsFontSizeToFitWidth = YES;
if (!sksTableViewCell) {
sksTableViewCell = [[SKSTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
sksTableViewCell.backgroundColor = [UIColor clearColor];
if ([[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] times] count]) {
sksTableViewCell.expandable = YES;
} else {
sksTableViewCell.expandable = NO;
}
}
sksTableViewCell.imageView.image = [UIImage imageNamed:@"medal"];
// Medals
int golds = [[self.bestThreeRacersDictionary objectForKey:@"golds"] intValue];
int silvers = [[self.bestThreeRacersDictionary objectForKey:@"silvers"] intValue];
int bronzes = [[self.bestThreeRacersDictionary objectForKey:@"bronzes"] intValue];
sksTableViewCell.textLabel.text = [NSString stringWithFormat:@" %@",[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] name]];
numberLabel.text = [NSString stringWithFormat:@"%lu", [Racer shift:golds silvers:silvers bronzes:bronzes]+indexPath.row];
helpIndex++;
if (indexPath.row < golds) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"goldMedal"];
numberLabel.text = @"1";
helpIndex--;
} else if (indexPath.row < (golds+silvers)) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"silverMedal"];
numberLabel.text = @"2";
helpIndex--;
} else if (indexPath.row < (golds+silvers+bronzes)) {
sksTableViewCell.imageView.image = [UIImage imageNamed:@"bronzeMedal"];
numberLabel.text = @"3";
helpIndex--;
}
[sksTableViewCell addSubview:numberLabel];
if ([[[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] times] count]) {
sksTableViewCell.expandable = YES;
} else {
sksTableViewCell.expandable = NO;
}
sksTableViewCell.textLabel.text = [NSString stringWithFormat:@"%@", [[[ArraySingleton sharedManager].sharedArray objectAtIndex:indexPath.row] name]];
return sksTableViewCell;
}
答案 0 :(得分:0)
不要在cellForRowAtIndexPath中反复添加numberLabel,而是将其添加到SKSTableViewCell中:
UILabel *numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(sksTableViewCell.frame.origin.x+22.5, sksTableViewCell.frame.origin.y+20.5, 15, 15)];
numberLabel.font = [UIFont systemFontOfSize:12];
numberLabel.textColor = [UIColor whiteColor];
numberLabel.textAlignment = NSTextAlignmentCenter;
numberLabel.adjustsFontSizeToFitWidth = YES;
问题应该解决。
答案 1 :(得分:0)
sksTableViewCell = [[SKSTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
您应该将CellIdentifier
传递给此处,否则无法检查是否存在单元格。 UITableView
将始终创建新单元格。
我的几个笔记可能对您有所帮助:
如果您愿意,可以使用不同的可重用标识符参数,并根据标识符区分单元格定义中的单元格。
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
您可以为表格单元格的每个子类创建四个不同的类,分别为Gold,Silver,Bronze和black,并定义其中的所有内容,并根据需要简单地调用它们。这将减少您的开销,因为您在上下滚动时不会一遍又一遍地完成这项工作。此外,如果您需要为每个单元格做更多具体的工作,它将非常方便您。