平滑滚动表格视图

时间:2016-06-01 06:02:15

标签: ios

我对UITableView有一个平滑的滚动问题。任何人都可以帮我解决问题吗?我写的代码就是这个 -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomTableCell";
    LabTestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];

    }//cell.txtHeading.text=@"hello";

    cell.txtHeading.text=[[_ResponseDic valueForKey:@"title"]objectAtIndex:indexPath.row];

    cell.txtdescribtion.text=[[_ResponseDic valueForKey:@"description"]objectAtIndex:indexPath.row];

    cell.txtPrice.text=[[_ResponseDic valueForKey:@"purchase_price"]objectAtIndex:indexPath.row];

    cell.txtLabName.text=[[_ResponseDic valueForKey:@"brand"]objectAtIndex:indexPath.row];

    NSString *path=@"https://www.fingerfry.com/pharmgo/uploads/product_image/";
    NSString *url=[path stringByAppendingString:[[_ResponseDic valueForKey:@"main_image"]objectAtIndex:indexPath.row]];

    NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    UIImage* image = [[UIImage alloc] initWithData:imageData];



    cell.image.image=image;

    return cell;

} 

2 个答案:

答案 0 :(得分:1)

如果您在cellForRowAtIndexPath中加载图片,请使用异步方法后台加载图片,使用下面的代码,

    dispatch_queue_t image_queue = dispatch_queue_create("com.company.app.imageQueue", NULL);
    dispatch_queue_t main_queue = dispatch_get_main_queue();

    NSString *path=@"https://www.fingerfry.com/pharmgo/uploads/product_image/";
    NSString *url=[path stringByAppendingString:[[_ResponseDic valueForKey:@"main_image"]objectAtIndex:indexPath.row]];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [paths  objectAtIndex:0];
    NSString  *dataPath = [cachePath stringByAppendingPathComponent:url];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ( [fileManager fileExistsAtPath:dataPath] )
    {
        UIImage *image = [UIImage imageWithContentsOfFile:dataPath];

        [cell.imgView setImage:image];
    }
    else
    {
        [cell.imgView setImage:[UIImage imageNamed:@"images.png"]];
        dispatch_async(image_queue, ^{
            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
            UIImage *image = [UIImage imageWithData:imageData];
            [UIImagePNGRepresentation(image) writeToFile:dataPath atomically:YES];
            dispatch_async(main_queue, ^{

                [cell.imgView setImage:image];

            });
        });

    }

我有同样的问题,我把上面的代码放在cellForRowAtIndexPath中,它的工作正常滚动,希望它有用

答案 1 :(得分:0)

首先安装pod:

  

pod' SDWebImage / WebP','〜> 3.7'在pod文件中。

然后你必须导入``。

#import <SDWebImage/UIImageView+WebCache.h>

写下面的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CustomTableCell";
LabTestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];

    cell = [nib objectAtIndex:0];

}//cell.txtHeading.text=@"hello";

cell.txtHeading.text=[[_ResponseDic valueForKey:@"title"]objectAtIndex:indexPath.row];

cell.txtdescribtion.text=[[_ResponseDic valueForKey:@"description"]objectAtIndex:indexPath.row];

cell.txtPrice.text=[[_ResponseDic valueForKey:@"purchase_price"]objectAtIndex:indexPath.row];

cell.txtLabName.text=[[_ResponseDic valueForKey:@"brand"]objectAtIndex:indexPath.row];

[cell.image sd_setImageWithURL:[NSURL URLWithString:[obj valueForKey:IMAGE_KEY]] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

            }];

return cell;

} 

参考链接: https://github.com/rs/SDWebImage