簡體   English   中英

UITableView單元格顯示錯誤的圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM