2010-08-27 79 views
1

我在iPhone上使用标准导航器界面。当我从最高级别的tableview移动到下一个级别时,我必须从核心数据加载大约2000条记录,这可能需要5-10秒,所以我想使用活动指标。活动指示灯未显示在iPhone上

我也做了下面的代码,如果我在DidSelect方法删除代码的工作,但从未否则会出现指示,即使观点仍在等待那里,而另一种观点认为负载。以下是方法:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

//-- start activity indicator (will be stopped when view disappears) 
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
[cell.contentView addSubview:m_activityIndicator]; 
[m_activityIndicator startAnimating]; 


return indexPath; 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 



//--show the listViewController 
CardListViewController *listViewController = [[CardListViewController alloc] initWithNibName:@"CardListViewController" bundle:nil]; 
NSString* selectedCardTypeName = [rootSelectionList objectAtIndex:indexPath.row]; 
enum CardTypes selectedCardType = cardTypeIDFromCardTypeName(selectedCardTypeName); 
listViewController.selectedCardType =selectedCardType; 
[self.navigationController pushViewController:listViewController animated:YES]; 
[listViewController release]; 


} 

如何在开始处理下一个listviewcontroller之前强制显示活动指示符?

回答

3

首先,为什么你需要同时加载2k行?你为什么不懒惰地去做呢?

首先,在加载表视图时,您将使用数据源来计算您将显示的行数,查询核心数据以仅获取数字,并且您的表视图将准备好显示所有行必要的细胞。

其次,从您需要的核心数据只有内容负荷,这意味着,仅在屏幕上的内容。想象一下,如果用户非常快地拖动并滚动表格视图,许多单元格将被加载而不需要它。正确的做法是只加载可见的单元格,它表示当滚动过程停止时可见的单元格。

看一看苹果这个例子就如何加载资源懒洋洋表视图:http://developer.apple.com/iphone/library/samplecode/LazyTableImages/Listings/Classes_RootViewController_m.html#//apple_ref/doc/uid/DTS40009394-Classes_RootViewController_m-DontLinkElementID_12

这对图像,但可以为对象的取做同样的想法。

懒洋洋地这样做,你不需要活动指标。

顺便说一句,回去与活动的指标问题,你可能需要问你细胞更新:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    //-- start activity indicator (will be stopped when view disappears) 
    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell.contentView addSubview:m_activityIndicator]; 
    [m_activityIndicator startAnimating]; 
    [cell setNeedsDisplay]; 

    return indexPath; 
} 

干杯

+0

可惜setNeedsDisplay没有工作,但我很感兴趣关于表的延迟加载的建议。 在我读这个例子之前,如果它是一个带有搜索功能的索引表,它会非常复杂吗? – WaterBoy 2010-08-27 03:36:40

+0

你不需要注意索引或搜索。对于你的情况,你可以考虑你将只有一个部分,并忘记搜索。你应该真正理解的是为什么和在哪里调用[self loadImagesForOnscreenRows];那就是延迟加载完成的地方。 – vfn 2010-08-27 04:09:29

+0

我当时一看,但我不认为我有把所有的记录,其用于填充我的索引列表的tableview“名字”这将有利于我。如果我得到这个名字,我不妨得到完整的记录。 – WaterBoy 2010-08-27 05:56:27