我的tableview包含从服务器加载的图像,这会减慢我的tableview滚动速度。以下是我的代码。任何想法,请帮助我。
- (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 :(得分:1)
您可以使用UITableView
延迟加载。
此处来自苹果的sample
你可以在github
看到这个项目是的,UITableView
是围绕延迟加载的假设而设计的。制作UITableView
时,根本不加载任何条目。而是等待系统框架调用您的cellForRowAtIndexPath
方法。对于需要加载的每个单元格,该方法被调用一次,这仅适用于当时可见的单元格。当用户滚动表格视图时,新单元格进入视图,并且每次进入视图的新单元格都会再次调用您的cellforRowAtIndexPath方法。
现在这是一般原则。但是,如果您的单元格由服务器中的数据填充,则还有一些其他注意事项。您可以将cellForRowAtIndexPath
构造为尽可能地懒惰,并为进入视图的每个单元调用服务器。但网络延迟会使用户体验非常糟糕。因此,在UITableView
中的单元格之外的数据结构中,提前缓冲大量数据单元的数据是有利的。这样,当cellForRowAtIndexPath
被调用时,您将能够通过从缓冲数据构造单元格来快速提供单元格的内容。究竟要缓冲多少数据取决于每个数据元素的大小,以及应用程序在内存分配方面做了多少其他事情。另外,我认为在您的应用中缓冲500到1000个单元格的数据没有错。但是,不要将数据的缓冲与UITableView's
排队和重用单元格混淆。没有理由保持大量的细胞准备就绪 - 只是进入这些细胞的数据。
答案 1 :(得分:1)
您可以使用异步加载来解决这个问题。 请仔细阅读本教程..