您好我有 UITableView ,我在其中使用包含图片的自定义单元格。当我重新加载 UITableView 时,它正在重新加载,但是图像没有移除我将此设置为图像也为nil并尝试了removeFromSuperView,但没有运气。
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;
}
}
我调试了程序,它正在为它分配nil。我也试过了ImageView的removeFromSuperView。可能是什么问题?
注意:Cell.Note是一个UIButton
答案 0 :(得分:1)
根据您的代码,您已将背景图像设置为按钮以控制状态。如果要更改背景图像或清除图像,则必须再次设置背景图像按钮。
[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateNormal];
[cell.Note setBackgroundImage:[UIImage imageNamed:@"changedImage.png"] forState:UIControlStateHighlighted];
否则将nil设置为背景图像,或者只在需要时隐藏。
答案 1 :(得分:1)
您没有在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:method。
中使用的其他视图因此,请考虑以下代码:
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];
}
希望它清楚!!!
答案 2 :(得分:-1)
尝试添加[cell.Note setNeedsDisplay]