UITable不能平滑滚动,单元格在IOS中显示错误的信息

时间:2012-05-04 09:34:54

标签: ios caching asynchronous uitableview loading

我有一个只有6个自定义单元格的UITable。每个CustomCell都有一个水平滚动视图,其中包含自定义视图。每个CustomView上都有一个ImageView和Text。

所以把它们放在一起可能看起来像这样

UITable - > CustomCell --->水平ScrollView - > CustomView - > ImageView和文本

以下是Cell in UITable的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *MySecondIdentifier = @"MySecondIdentifier";
    UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:MySecondIdentifier];

    if(cell2 == nil){

        cell2 = [(CustomCell* )[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MySecondIdentifier target:self row:indexPath.row parent:self]; 

    }
    [cell2 setSelectionStyle:UITableViewCellSelectionStyleNone];
    [cell2 setValueToCellViewItem:tempTitleString setOfImage:dictCatData];
    return cell2;

} 

其中DictCatData =数据节点的NSMutableArray 和tempTitleString =单元格的标题字符串(将其用于其他目的)

以下是我设置CustomCell值的方法

- (void) setValueToCellViewItem:(NSString *)pTitle setOfImage:(NSMutableArray *)catData{
[the_pScrolView setContentSize:CGSizeMake([catData count] * 107 , 107)];

int counter = 0;
for(NSDictionary *tempDict in catData){

    NSString *url = [[NSString alloc]init];
    url = [tempDict objectForKey:@"main_img_url"];
    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    UIImageView *mSdWebImage = [[UIImageView alloc] initWithFrame:CGRectMake(counter * 107, 0, 107, 107)];
    [mSdWebImage setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil];
    [mSdWebImage setBackgroundColor:[UIColor grayColor]];
    [the_pScrolView addSubview:mSdWebImage];

    ///Setting the title properties
    UILabel *the_pLable = [[UILabel alloc] initWithFrame:CGRectMake((counter * 107) + 15, 85, 97, 22)];
    the_pLable.textColor = [UIColor whiteColor];
    the_pLable.font = [UIFont fontWithName:@"Helvetica" size:10.0];
    the_pLable.numberOfLines = 1;
    the_pLable.backgroundColor = [UIColor clearColor];
    the_pLable.text = [tempDict objectForKey:@"title"];

    [the_pScrolView addSubview:the_pLable];
    counter++;

}

我正在使用SDWebImage进行异步下载和缓存,因为我认为这是网上最好的。

ScrollView可以包含0到30多个图像的图像

当我在iPhone上打开此页面时,我想这些图像正在被正确缓存下载,因为我能够毫无困难地看到它们

我的问题是

  1. 当我尝试向上和向下滚动表格时,滚动不顺畅。那么如何在不影响背景图像下载和缓存的情况下使其更加平滑

  2. 当我多次上下滚动表格时,我会重新绘制自定义单元格,我猜想没有图像的CustomCells(即scrollView中没有自定义视图)会显示来自/ top下方其他自定义单元格的图像。

  3. 有时应用程序崩溃,我想这是内存管理问题。

2 个答案:

答案 0 :(得分:0)

下载图片有多大?我有类似的问题(没有额外的水平滚动),我能够通过使用图像的实际缩略图而不是实际图像(在TableView中)来修复它。

您可能想尝试在单独的对象中下载,缓存和创建图像的缩略图,然后让TableViewCell加载图像的缩略图而不是实际图像。

这加快了我的滚动速度。

答案 1 :(得分:0)

要修复显示错误图像的重复使用的单元格,只需在调用代码显示新图像之前删除cellForRowAtIndexPath中的图像。这样,如果图像被延迟,至少旧的图像已被删除或隐藏。