2015-03-01 7 views
2

У меня есть UITableView с двумя ячейками. Одна ячейка с изображением и одна без изображения. Когда ячейка без изображения отображается под ячейкой со снимком, все в порядке (Image 1). Но когда я сортирую список, а ячейка без изображения отображается над ячейкой с изображением, ячейка без изображения показывает то же изображение, что и другая ячейка (Image 2). Я борюсь с этой проблемой в течение нескольких дней, но я не могу понять, где проблема.UITableView Cell показывает неправильное изображение

Вот код для настройки изображения:

- (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) так только для ячейки, которые должны иметь изображение, набор изображений IST:

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]]; 
} 
+0

Почему у вашего TableView есть только один идентификатор для ячеек, т.е. «Ячейка». Должно быть два отдельных идентификатора: один для ячейки с изображением и один для ячейки без изображения. –

+0

Клетки перерабатываются !!! –

+0

У меня есть только один идентификатор ячейки, потому что пользователь может загрузить или удалить изображение, так что есть только один вид ячейки. – Frederik

ответ

2

Ваша проблема в том, что вы не устанавливаете изображение ячейки, которое не хотите nil.

Повторно используются UITableViewCells, поэтому вам нужно настроить каждое значение в ячейке, которое вы хотите или не хотите.

Просто выяснить, если вам нужно представить изображение, если это установить его, если нет, то установите

UIImageView.image = nil;

1

Вы должны удалить изображение, когда у вас нет миниатюры, так как клетки используются повторно:

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]; 
    } 
} 
+0

Спасибо, что работает отлично! – Frederik

Смежные вопросы