UITableCell AccessoryView:将AccessoryView设置为等于UIImageView无限循环



编辑:我自己已经找到了答案,但这里是给其他需要它的人的:UIImageView无法共享,因此每个可见单元格都需要不同的UIImageView实例化。现在你知道了

我有一个自定义表,它有两种类型的单元格。一个单元格只设置为在选中标记类型的普通附件之间切换。另一个单元格设置为具有自定义图像作为附件类型。选择后,附件图像将更改为相反类型,显示"已邀请"或"邀请"消息。

我已经将出现错误的代码缩小到以下内容,这些内容在我的tableView:cellForRowAtIndexPath委托方法中找到。

if(indexPath.section == 0){
    cell = [tableView dequeueReusableCellWithIdentifier:self.directCellID];
    cellValue = [self.contactsUsingApp objectAtIndex:indexPath.row];
    cell.imageView.image = [self getContactImage:indexPath.row];
//vvvvvvvvvvvvvvvvv This is the section at fault vvvvvvvvvvvvvvvvv
    if([self.selectedContactsUsingApp containsObject:indexPath])
        cell.accessoryView = self.invitedStatus;
    else
        cell.accessoryView = self.notInvitedStatus;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
}

如果我评论掉这一部分,我不再有失控的内存使用率(模拟器向我展示了某种持续的分配,从40Mb开始后,它超过了1.29Gb),但很明显,图像不再显示。

如果重要的话,UIImageViews初始化如下:

UIImage *invite = [self imageWithImage:[UIImage imageNamed: @"invite_btn.png"] scaledToSize:CGSizeMake(40, 20)];
UIImage *invited = [self imageWithImage:[UIImage imageNamed: @"invited_btn.png"] scaledToSize:CGSizeMake(40, 20)];
self.notInvitedStatus = [[UIImageView alloc]initWithImage:invite];
self.invitedStatus = [[UIImageView alloc]initWithImage:invited];

(imageWithImage:scale是一个函数,它将调整大小的图像返回到适当的缩放比例,说明此处的视网膜:调整UIImage大小的最简单方法?)

当我选择其中一个单元格时,也会发生同样的冻结,因为我的tableView:didSelectRowAtIndexPath方法的工作逻辑与初始化方法相同。

帮助?

我自己已经找到了答案,但这里是给其他需要它的人的:UIImageView不能共享,所以每个可见单元格都需要不同的UIImageView实例化。现在你知道了

最新更新