我在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;
}
答案 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)];
}