UITable首先为我的UITableViewCell的最后一行加载UITableViewCell

时间:2011-04-24 07:27:58

标签: iphone objective-c

使用UITableView进行编码时,遇到了我无法理解的错误。我的表格有3行,每行设置50px,除了我设置500px的第二行,它填满了整个屏幕。当我向下滚动到底部时出现问题,我的底部角色重复第一行。这是我的自定义代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return 3;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"TestTable";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        if (indexPath.section ==0 && indexPath.row==0) {
            cell.contentView.backgroundColor = [UIColor redColor];
        }       
        if (indexPath.section ==0 && indexPath.row==1) {
            cell.contentView.backgroundColor = [UIColor blueColor];
        }
        if (indexPath.section ==0 && indexPath.row==2) {
            cell.contentView.backgroundColor = [UIColor greenColor];
        }


    }
    // Configure the cell...
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (indexPath.row==1) {
        return 400;
    }
    return 50; 
}  

根据代码,第一行是红色,第二行是红色,第三行是蓝色。但我的最后一行是红色(重复第一行)。如果我将第2行设置为短于屏幕,例如100px,第三排装载罚款。

原创展示

enter image description here

向下滚动

enter image description here

欣赏所有类型的建议,因为我已经没想到这是怎么回事。

由于

1 个答案:

答案 0 :(得分:1)

当第二行为长时,第一行变为不可见,其单元格在最后一行中重复使用。这就是为什么每次调用tableView:cellForRowAtIndexPath:时都要配置单元格,即(cell == nil) {...}阻止之后:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"TestTable";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...
    if (indexPath.section == 0 && indexPath.row==0) {
        cell.contentView.backgroundColor = [UIColor redColor];
    }       
    if (indexPath.section ==0 && indexPath.row==1) {
        cell.contentView.backgroundColor = [UIColor blueColor];
    }
    if (indexPath.section ==0 && indexPath.row==2) {
        cell.contentView.backgroundColor = [UIColor greenColor];
    }

    return cell;
}