TableView

时间:2016-10-22 23:00:21

标签: ios objective-c uitableview

正如您在下面的代码中所看到的,我有一些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;
}

2 个答案:

答案 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将始终创建新单元格。

我的几个笔记可能对您有所帮助:

  1. 如果您愿意,可以使用不同的可重用标识符参数,并根据标识符区分单元格定义中的单元格。

    -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier  
    
  2. 您可以为表格单元格的每个子类创建四个不同的类,分别为Gold,Silver,Bronze和black,并定义其中的所有内容,并根据需要简单地调用它们。这将减少您的开销,因为您在上下滚动时不会一遍又一遍地完成这项工作。此外,如果您需要为每个单元格做更多具体的工作,它将非常方便您。

  3. 最后一件事,如果没有梯子也不好。代码很快就会以这种方式超出比例,并且会大大降低可读性。