滚动时TableView行会混淆

时间:2014-09-30 21:11:40

标签: ios uitableview

我在UIViewController中使用tableview,我有UITableViewCell的子类。 我在viewDidLoad中注册了单元格; - 在cellForRowAtIndexPath中,我使用dequeueReusableCellWithIdentifier来获取单元格,并将所有标签重置为正确的值;但是,当表格滚动时,顶行和底行混合起来,标签互换。我不知道为什么当我将单元格重置为每行的正确值时会发生这种情况。你知道混淆的原因吗?

[self.myFoldersTableView registerClass:[QConnectFoldersTVCell class] forCellReuseIdentifier:QMY_FOLDERS_CELL_ID];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:NSIndexPath *)indexPath
{
    QConnectFoldersTVCell *cell = (QConnectFoldersTVCell *)[tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];

    NSMutableDictionary *cellDataDict = [self findCellDataAtIndexPath:indexPath];

    // Configure the cell...
    cell.mainLabel.text = cellDataDict[FOLDER_CELL_DICT_KEY_MAIN_TEXT];
    cell.detailLabel.text = cellDataDict[FOLDER_CELL_DICT_KEY_DETAIL_TEXT];
    cell.folderCellType = [cellDataDict[FOLDER_CELL_DICT_KEY_TYPE] intValue];         


    return cell;
}
  • 我想补充一点,我已经打印出为行设置的标签值,并且每行的数据都是正确的。在上述功能中,单元格被重置为正确的数据。所以我不知道为什么屏幕上会显示其他内容。

1 个答案:

答案 0 :(得分:0)

  • 我找到了混淆的原因。在我的tableViewCell子类中,我使用layoutSubviews对标签进行初始化,因为单元格的实际大小在init中不可用,但在layoutSubviews中可用。删除layoutSubviews override似乎已经停止了数据/值的行混合。

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        CGSize size = self.contentView.frame.size;
        CGFloat mainHeight = ((size.height * 6)/10) - 6.0;
        CGFloat detailHeight = ((size.height*4)/10) - 6.0;
        self.mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(8.0, 4.0, size.width - 16.0, mainHeight)];
        self.detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(8.0, 4.0+(self.mainLabel.frame.size.height)+4.0, size.width - 16.0, detailHeight)];    
    }