2010-08-27 88 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