1

这是我的 cellForRowAtIndexPath 代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"MonthViewPopUpCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nibObjcet = [[NSBundle mainBundle] loadNibNamed:@"MonthViewPopUpCell" owner:self options:nil];
        cell = [nibObjcet objectAtIndex:0];

        cellTitle.font = [UIFont fontWithName:fontB size:size4];
        cellSubtitle.font = [UIFont fontWithName:fontR size:size4];
    }

    if (indexPath.row == 0) {
        cellTitle.text = @"11:03";
    }

    return cell;
}

出于某种我不明白的原因,tableview 错误地重用了我的自定义单元格。我认为这段代码会使第一个单元格显示 11:03,其余所有单元格将显示 10:00(如在 xib 文件中),但其他一些单元格也显示 11:03,并且当我滚动时它们的位置正在改变像疯了似的上上下下……

有人可以告诉我我做错了什么吗?

谢谢

4

3 回答 3

0

它不会在同一个位置重用同一个单元格,它只是取一个已经存储在内存中的单元格并将其重用于另一个位置的表格,因此您每次都需要设置它的文本,例如:

    if (cell == nil) {
        NSArray *nibObjcet = [[NSBundle mainBundle] loadNibNamed:@"MonthViewPopUpCell" owner:self options:nil];
        cell = [nibObjcet objectAtIndex:0];

        cellTitle.font = [UIFont fontWithName:fontB size:size4];
        cellSubtitle.font = [UIFont fontWithName:fontR size:size4];
    }

    if (indexPath.row == 0) {
        cellTitle.text = @"11:03";
    }
    else{
        cellTitle.text = @"10:00";
    }
于 2013-05-21T10:40:06.443 回答
0

通常,一旦单元格移出 UITableView 的可见区域,它就会被重用。你可以做一件事。还要在笔尖中检查您的自定义单元格的可重用标识符是否设置为 MonthViewPopUpCell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"MonthViewPopUpCell"; ////As you have specified in XIB

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nibObjcet = [[NSBundle mainBundle] loadNibNamed:@"MonthViewPopUpCell" owner:self options:nil];
        cell = [nibObjcet objectAtIndex:0];

        cellTitle.font = [UIFont fontWithName:fontB size:size4];
        cellSubtitle.font = [UIFont fontWithName:fontR size:size4];
    }

    if (indexPath.row == 0) {
        cellTitle.text = @"11:03";
    }else {
        cellTitle.text = @"10:00";
   }


    return cell;
}
于 2013-05-21T10:48:28.417 回答
0

以下是调用自定义单元格的好方法。我希望它会奏效。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"cell";

MonthViewPopUpCell *cell = (MonthViewPopUpCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    NSArray *nibObjcet = [[NSBundle mainBundle] loadNibNamed:@"MonthViewPopUpCell" owner:self options:nil];
    cell = [nibObjcet objectAtIndex:0];

    cellTitle.font = [UIFont fontWithName:fontB size:size4];
    cellSubtitle.font = [UIFont fontWithName:fontR size:size4];
}

if (indexPath.row == 0) {
    cellTitle.text = @"11:03";
}else{

    cellTitle.text = @"10:00";

}

return cell;
}
于 2013-05-21T10:50:06.777 回答