在表视图中镜像延迟加载



我想在我的表视图中使用延迟加载图像的概念。我的image rul字符串数组是(MSMutableArray)"images"。如何在cellForRowAtIndexPath中实现此功能。

它看起来像:

-(UITableViewCell *) tableView:(UITableView *)AtableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[searchtable dequeueReusableCellWithIdentifier:@"cell"];
    if(!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

        cell.textLabel.font=[UIFont systemFontOfSize:12];
        cell.imageView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[appSmallLogos objectAtIndex:indexPath.row]]]];
        cell.detailTextLabel.text=[appReleaseDates objectAtIndex:indexPath.row];

    }
    return cell;
}

试试这个代码:

   UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.frame = CGRectMake(your bounds);  
[cell addSubview:indicator];
[indicator bringSubviewToFront:self.view];
[indicator startAnimating];

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,  0ul);
    dispatch_async(queue, ^{
     //This is what you will load lazily
        NSString *u=[NSString stringWithContentsOfFile:r.url encoding:NSUTF8StringEncoding error:nil];
        NSURL *imageURL=url;
        NSData *image=[NSData dataWithContentsOfURL:imageURL];
        dispatch_sync(dispatch_get_main_queue(), ^{
            CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
            cell.imageView.image=[UIImage imageWithData:image];
            [cell setNeedsLayout];
  [indicator stopAnimating];
        });
    });
cell.cellDescription.text=r.url;// this is which you want to add in first time.

我不确定,但试试看。

您可以使用SDWebImage库,该库将异步下载和缓存图像。通过将url作为参数传递给它

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:MyIdentifier] autorelease];
    }
    // Here we use the new provided setImageWithURL: method to load the web image
    [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    cell.textLabel.text = @"My Text";
    return cell;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    TableCellLayout *cell = (TableCellLayout *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[TableCellLayout alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.cellName = [[array valueForKey:@"name"] objectAtIndex:indexPath.row];
    cell.cellImage = [UIImage imageNamed:@"placeholder.png"]; // add a placeholder    
    NSString *imageURL = [[array valueForKey:@"imageLink"] objectAtIndex:indexPath.row];
    NSURL *theURL = [NSURL URLWithString:imageURL];
    if (asynchronousImageLoader == nil){
        asynchronousImageLoader = [[AsynchronousImages alloc] init];
    }
    [asynchronousImageLoader loadImageFromURL:theURL];
    cell.cellImage = asynchronousImageLoader.image;
return cell;
}

我终于设法做到了设置图像与:

– performSelectorOnMainThread:withObject:waitUntilDone:

下载图像后,

最新更新