2010-04-17 56 views
0

我有一個UITableView通過實現NSFetchedResultsControllerDelegate的控制器從CoreData獲取。我怎麼能自動選擇第一行(並觸發tableView:didSelectRowAtIndexPath消息)?我很懷疑在UIViewController生命週期(viewDidLoad等)上工作的解決方案,但我是新手,所以我是開放的。UITableView通過NSFetchedResultsControllerDelegate,默認選擇第一條記錄?

我已經嘗試了各種各樣的東西,但我不確定在調用堆棧中放置它的位置。我已經嘗試在tableView:cellForRowAtIndex:方法內調用cell.selected = true,但這只是最終將單元格變黑(並且不會觸發所選的回調方法)

一個包含所有委託和核心數據協議的tagent問題,它意味着異步數據提取(多線程)?或者是NSFetchedResultsController在同一線程中調用其所有相關的方法?也許我只是害怕,如果它是異步的,那麼會遇到一些競爭條件,以後很難排除故障。

回答

0

無法添加註釋以詢問當單元格被選中時您想要做什麼,所以我將不得不猜測。

如果你要標記的細胞作爲選擇,那麼你應該使用accessoryType屬性,例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    ... 
} 

在另一方面,如果你正在嘗試進行基於選擇的第一部分邏輯單元格,甚至顯示一個新的視圖,那麼這個邏輯應該是一種方法,你可以簡單地調用一次數據加載。

+0

我的目標是在didSelectRowAtIndexPath內添加邏輯以在另一個視圖中顯示數據。本質上是數據模型的深入分析。 我的差距正是「數據加載後調用的方法」。 事實證明這是一個「嘟嘟」。我被困在我的webdeveloper ajax rut中,表異常加載發生,所以我從來沒有考慮到明顯的,我應該找到第一行,並在調用fetchedResultsController.performFetch後立即選擇它: 感謝您敲我鬆。 – deafgreatdane 2010-04-17 19:41:25

0

這樣做:

if (indexPath.section == 0 && indexPath.row == 0) { 
    //select first row by default 
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
    //then populate detail view with corresponding managedObject 
    [self tableView:tableView didSelectRowAtIndexPath: indexPath]; 
} 

當然,這是假設你已經編碼的didSelectRowAtIndexPath方法正確。