0

我有一个使用自定义 UITableViewCells 的简单 UITableView。UITableView 的属性上设置的选项只是样式设置为 Grouped。当我试图向下滚动浏览不同的项目时,滚动非常跳跃。我已经研究了很多关于提高 iPhone UITableView 滚动性能的技巧?以及本网站上的其他一些问题。虽然我还没有真正找到解决方案。

编辑**** 我使用 WSDL Web 服务将数据加载到 UITableViewCells 中。这些单元格中只有一个 UITextView 和三个按钮。

编辑 ****

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"NavigatorCell";

    NewCell *cell = (NewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    cell.postId = [[items objectAtIndex:indexPath.row] objectForKey:@"PostID"];
    cell.post.text = [[items objectAtIndex:indexPath.row] objectForKey:@"Post"];

    return cell;
}
4

4 回答 4

1

我看到你NewCell的子类。

不要忘记将此方法包含在您的 NewCell.m 中

- (NSString *) reuseIdentifier
{    
    return @"Cell Identifier";
}

当然@"Cell Identifier"应该与您在cellForRowAtIndexPath:. 如果您未能实现此方法,则每个单元格都将从头开始生成。

于 2013-04-22T21:26:33.843 回答
0

你在使用 dequeReusableCellWithIdentifier 吗?请遵循以下格式。由于您现在提到您正在从网络加载数据,因此您需要异步执行此操作以允许平滑滚动。要从 web 服务(异步)加载,这里有一个不错的项目

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

    return cell;
}
于 2013-04-22T21:15:19.073 回答
0

将 tableview 设置为 Reuse cells 是确保良好性能的最基本方法。基本上,这意味着不是为表格视图中的每个单元格创建一个新单元格,而是您的表格视图将回收屏幕外的单元格。基本设置如下,更多内容可以从此处链接的 UITableViewDelegate 上的苹果文档中了解

       - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {
            NSString *CellIdentifier = @"Cell Identifier";

            CustomCellClassName *cell = (CustomCellClassName *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                if (cell == nil){
                    cell = [[CustomCellClassName alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.frame.size.height)];
                    //Do basic cell construction common to all cells of this type here
                    //Set background, image etc.  
                }



                //Do specific cell construction here
                return cell;
于 2013-04-22T21:22:06.853 回答
0

如果您通过网络为每个单元加载数据,您会发现性能很差。批量获取数据,然后当它准备好时告诉你的 tableview 重新加载自己。

使用 Core Data 作为临时后备存储,并使用 NSFetchedResultsController 从 Core Data 检索信息,将为您节省一些工作。

于 2013-04-22T21:25:13.433 回答