有一个UITableView,我正在使用包含图像的自定义单元格。当我重新加载 UITableView 时,它重新加载正常,但图像没有删除,我也将其设置为图像为 nil,并尝试从超级视图中删除,但没有运气。
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identity];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identity DefaultsArray:defaultColAndSpacesDict];
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
cell.selectionStyle=UITableViewCellSelectionStyleNone;
}
if([[dtaDictionary allKeys] count]!=0)
{
[cell.contentView clearsContextBeforeDrawing];
if([defaultsArray containsObject:@"Note"])
{
NSString *patNotes=[[currRow objectForKey:@"pat_notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *appNotes=[[currRow objectForKey:@"Notes"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
{
[cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
[cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateHighlighted];
[cell.Note addTarget:self action:@selector(showNote:) forControlEvents:UIControlEventTouchUpInside];
}
else
{
cell.Note.imageView.image=nil;
}
}
我调试了程序,它正在为其分配零。 我也尝试了从ImageView的SuperView中删除。可能是什么问题?
注意:Cell.Note是一个UIButton
您没有首先在 if 条件中将图像分配给 imageView。
例如:
if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
{
cell.Note.imageView.image=[UIImage imageNamed:@"notes-green.png"];
//Rest of Code
}
else
{
cell.Note.ImageView.image=nil ;
}
上述情况将完美运行,因为现在您正在将一些图像分配给 imageView。
但在您的情况下,您是通过调用自定义方法 setBackgroundImage: 来分配图像。在这种情况下,它被分配给在setBackgroundImage:方法中使用的其他视图。
因此,请考虑以下代码:
if((![patNotes isEqualToString:@""] && patNotes!=nil) || (![appNotes isEqualToString:@""] && appNotes!=nil))
{
[cell.Note setBackgroundImage:[UIImage imageNamed:@"notes-green.png"] forState:UIControlStateNormal];
//Rest of Code
}
else
{
[cell.Note setBackgroundImage:nil forState:UIControlStateNormal];
}
希望它清楚!!
根据您的代码,您已将背景图像设置为控件状态的按钮。如果要更改背景图像或清除图像,则必须再次为按钮设置背景图像。
[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateNormal];
[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateHighlighted];
否则,将nil设置为背景图像或根据需要隐藏。
尝试添加[cell.Note setNeedsDisplay]