Вам следует кэшировать загруженные изображения.
Один из подходов может заключаться в создании, например, изменяемого словаря, в котором вы храните свои изображения с ключами, уникальными для вашего UITableViewCells
.В cellForRowAtIndexPath
вы получаете соответствующее изображение, вызывая, например, [dictionary objectForKey:uniquecellidentifier]
.Если он возвращает nil
, вы знаете, что изображение еще не было загружено, и вы должны создать запрос для этого.Как только загрузка закончится, вы сохраните изображение в словаре ([dictionary setObject:image forKey:uniquecellidentifier]
. Это должно дать вам более конкретную идею:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSString *cellid=[NSString stringWithFormat:@"Cell%i%i", indexPath.section, indexPath.row];
if([dictionary objectForKey:cellid]){
NSLog(@"Retrieving value for %@: %@", cellid, [dictionary objectForKey:cellid]);
cell.textLabel.text=[dictionary objectForKey:cellid];
//Show image from dictionary
}else{
NSLog(@"Now value set for %@.", cellid);
[dictionary setObject:[NSString stringWithFormat:@"Testvalue%@", cellid] forKey:cellid]; //Save image in dictionary
cell.textLabel.text=@"Loaded";
}
return cell;
}
Создать NSMutableDictionary
с именем "словарь "в вашем заголовочном файле и инициализируйте его в viewDidLoad
:
dictionary = [[NSMutableDictionary alloc] init];
Заголовочный файл:
NSMutableDictionary *dictionary;
Это приведет к следующему поведению: В первый раз ваша ячейкаотображается «Loaded». Во всех последующих отображениях будет отображаться его установленное значение.