我有一个UITableViewController在向下滚动时复制行。我知道细胞正在重复使用,但我似乎无法弄清楚如何解决它。我已经阅读了其他类似的帖子,但在我的案例中无法找到解决方案。
在我的代码中我做错了什么导致重复的单元格?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"StringTableViewCell";
if (indexPath.row == 0) {
cellIdentifier = @"StringTableViewCell";
} else if (indexPath.row == 1) {
cellIdentifier = @"StringTableViewFooter";
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// Sets up the table view cell accordingly based around whether it is the
// string row or the footer
if (cell) {
if ([cell isKindOfClass:[StringTableViewCell class]]) {
StringTableViewCell *stringCell = (StringTableViewCell *)cell;
// Sets the photos to the array of photo data for the collection view
[stringCell setCollectionData:self.images];
} else if ([cell isKindOfClass:[StringFooterTableViewCell class]]) {
// Sets the table view cell to be the custom footer view
StringFooterTableViewCell *footerCell = [[StringFooterTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"StringTableViewCellFooter"];
// Init's the footer with live data from here
[footerCell setStringUploaderName:@"Name"];
[footerCell setStringUploadDate:@"10 minutes ago"];
[footerCell setStringUploaderProfileImage:[UIImage imageNamed:@"avatar.jpg"]];
[footerCell setCommentButtonTitle:@"4.7k"];
[footerCell setLikeButtonTitle:@"11.3k"];
return footerCell;
}
}
return cell;
}
答案 0 :(得分:0)
UITableViewCell有一个prepareForReuse方法,每次要重用它时都会调用它。您可以将StringTableViewCell的imageview图像设置为nil,或者您可以在indexPath本身的单元格上执行此操作,因为仅鼓励prepareForReuse方法用于重置单元格的状态(如hightlighted或selected)以及它的子视图
答案 1 :(得分:0)
由于你有两个不同的单元格,你需要这样的东西:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0) {
static NSString *cellIdentifier = @"StringTableViewCell";
StringTableViewCell *stringCell = (StringTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!stringCell) {
stringCell = [[StringTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
[stringCell setCollectionData:self.images];
return stringCell;
} else if (indexPath.row == 1) {
static NSString *cellIdentifier = @"StringTableViewFooter";
StringFooterTableViewCell *footerCell = (StringFooterTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!footerCell) {
footerCell = [[StringFooterTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
// Init's the footer with live data from here
[footerCell setStringUploaderName:@"Name"];
[footerCell setStringUploadDate:@"10 minutes ago"];
[footerCell setStringUploaderProfileImage:[UIImage imageNamed:@"avatar.jpg"]];
[footerCell setCommentButtonTitle:@"4.7k"];
[footerCell setLikeButtonTitle:@"11.3k"];
return footerCell;
} else {
return nil; // this shouldn't happen but makes the compiler happy
}
}
当然,需要更新代码以显示适合给定部分的数据。