2012-11-23 57 views
0

我的tableview包含从服务器加载的图像,这减慢了我的tableview滚动。以下是我的代码。任何想法,请帮助我。tableviewcell中的图像减慢滚动

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


    CustomTblViewCellFacetoface *cell = (CustomTblViewCellFacetoface *) [tableView dequeueReusableCellWithIdentifier:@"cellA"]; 
    if (cell == nil) 
    { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTblViewCellFacetofaceNib" owner:Nil options:nil]; 

     for (id currentObject in topLevelObjects) 
     { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) 
      { 
       cell = (CustomTblViewCellFacetoface *) currentObject; 

       break; 
      } 
     } 
    } 
    // configure cell 

    IStructFacetofaceRequests *objappointmentdetails = [M_ArrFacetofaceRequests objectAtIndex:indexPath.row]; 
    cell.selectionStyle       = UITableViewCellSelectionStyleNone; 
    cell.backgroundColor      = [UIColor clearColor]; 
    cell.m_CtrllblName.text      = objappointmentdetails.m_strUsername; 
    cell.m_CtrllblVenue.text      = [NSString stringWithFormat:@"Venue : %@",objappointmentdetails.m_strVenue]; 
    cell.m_CtrllblDate.text      = [NSString stringWithFormat:@"%@ - %@",objappointmentdetails.m_strStartDate,objappointmentdetails.m_strEndDate]; 
    [cell.m_CtrllblName setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]]; 
    [cell.m_CtrllblVenue setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]]; 
    [cell.m_CtrllblDate setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]]; 
    cell.m_CtrllblName.font=[UIFont fontWithName:@"Arial-BoldMT" size:16]; 
    NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: objappointmentdetails.m_strImageurl]]; 

    cell.m_CtrlImgViewUser.image=[UIImage imageWithData: imageData]; 
    [cell.m_CtrlBtnView addTarget:self action:@selector(MoveToNextView:) forControlEvents:UIControlEventTouchUpInside]; 
    cell.m_CtrlBtnView.tag=indexPath.row; 

    return cell; 

} 

这是我在cellfor行索引路径中使用的代码。

+0

你的图像的分辨率? – ignotusverum

+0

仍然有问题? – Omarj

回答

1

您可以使用UITableView延迟加载。

这里的sample从苹果

和u可以看到这个项目在github

是,UITableView是围绕延迟加载的假设。当你制作UITableView时,根本不加载任何条目。相反,您需要等待系统框架调用您的cellForRowAtIndexPath方法。对于每个需要加载的单元格,该方法会被调用一次,并且这只适用于当时可见的单元格。当用户滚动表格视图时,新的单元格进入视图,并且您的cellforRowAtIndexPath方法会再次被调用,以便每个新的单元格进入视图。

现在,这是一般原则。但是,如果您的单元格正在被来自服务器的数据填充,那么还有一些额外的考虑因素。你可以将你的cellForRowAtIndexPath构造得尽可能的懒惰,并为每个进入视图的单元调用服务器。但是网络延迟会让用户体验变得非常糟糕。因此,在UITableView中的单元之外的数据结构中,提前缓冲大量数据的单元格对您有利。这样,当cellForRowAtIndexPath被调用时,您将能够通过从缓冲数据构建单元来快速提供单元格的内容。确切地说有多少数据要缓冲取决于每个数据元素的大小以及您的应用程序在内存分配方面做了些什么。不速之客,我发现在你的应用中缓冲500到1000个单元的数据是没有问题的。但是不要将你的数据缓冲与排队和重用单元混淆。没有理由保持大量的细胞准备好 - 只是进入这些细胞的数据。