[英]UITableView Cell showing wrong image
我有一個帶有兩個單元格的UITableView
。 一個包含圖片的單元格,另一個不含圖片的單元格。 當沒有圖像的單元格顯示在具有圖像的單元格下面時,一切都很好( 圖像1 )。 但是,當我對列表進行排序時,沒有圖像的單元格顯示在帶有圖像的單元格上方,則沒有圖像的單元格顯示的圖像與另一個單元格相同( 圖像2 )。 我已經為這個問題苦苦掙扎了好幾天,但是我找不到問題出在哪里。
這是設置圖像的代碼:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
Object *myObject = [[Datamodel sharedInstance] objectAtIndex:(int)indexPath.row];
cell.textLabel.text = myObject.name;
if([myObject.imageNames count] != 0 && !myObject.thumbnail)
{
myObject.thumbnail = [[NSString alloc] initWithString:[myObject.imageNames objectAtIndex:0]];
}
if(myObject.thumbnail)
{
NSLog(@"Setting thumbnail");
NSString *pathToImgData= [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents" ]stringByAppendingPathComponent:@"ImgData"];
NSMutableString *imgPath = [[NSMutableString alloc] initWithString:pathToImgData];
[imgPath appendString:@"/"];
[imgPath appendString: myObject.thumbnail];
UIImage* image = [UIImage imageWithContentsOfFile:imgPath];
UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(8, 8, 128, cellHeight-16)];
imv.image = image;
[cell addSubview:imv];
}
return cell;
}
關於控制台輸出,只有一個對象進入if(myObject.thumbnail)
條件,因此僅對於應該具有圖像的單元格設置圖像:
2015-03-01 ***** Cell with image *****
2015-03-01 --> Setting the image
2015-03-01 ***** Cell wihout image *****
2015-03-01 --> NOT setting the image
2015-03-01 ***** Cell without image *****
2015-03-01 --> NOT setting the image
2015-03-01 ***** Cell with image *****
2015-03-01 --> Setting the image
以及對列表進行排序的代碼:
-(void)sortList{
NSSortDescriptor *sortObjectName = [NSSortDescriptor sortDescriptorWithKey:@"objectName" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 caseInsensitiveCompare:obj2];
}];
[self.arrayData sortUsingDescriptors:@[sortObjectName]];
}
您的問題是,您不會設置您不想設為nil
的單元格的圖像。
UITableViewCells
被重用,因此您需要在單元格中配置所需或不需要的每個值。
只要弄清楚是否需要顯示圖像,就可以設置圖像,如果不需要,則設置
UIImageView.image = nil;
如果沒有縮略圖,則必須刪除圖像,因為單元已被重用:
if(myObject.thumbnail)
{
NSLog(@"Setting thumbnail");
NSString *pathToImgData= [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents" ]stringByAppendingPathComponent:@"ImgData"];
NSMutableString *imgPath = [[NSMutableString alloc] initWithString:pathToImgData];
[imgPath appendString:@"/"];
[imgPath appendString: myObject.thumbnail];
UIImage* image = [UIImage imageWithContentsOfFile:imgPath];
UIImageView *imv = [cell viewWithTag:1234];
if (!imv) {
imv = [[UIImageView alloc]initWithFrame:CGRectMake(8, 8, 128, cellHeight-16)];
[cell addSubview:imv];
imv.tag = 1234;
}
imv.image = image;
} else {
UIView *imageView = [cell viewWithTag:1234];
if (imageView) {
[imageView removeFromSuperview];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.