2013-07-10 222 views
0

這可能很簡單,但我無法理解它。我有一個UIViewController與放置在它上面的兩個UITableView子視圖(使用Storyboards)。將一個對象傳遞給UIViewController的子視圖

enter image description here

這些都具有自定義類和用於中的兩個單獨的列表。使用自定義類是因爲每個UITableView中的單元格可以在表格之間拖放。視圖控制器被segued並且具有用segue推送的管理對象上下文。

我無法弄清楚的是如何將託管對象上下文(和其他對象)傳遞給UITableView子視圖。這些對象在表視圖類中定義。

我已經設置IBOutlets到每個表視圖,所以可以引用UITableViews自己,但我沒有自定義對象的可見性。

如何將對象傳遞給自定義類子視圖?

回答

0

我無法弄清楚的是如何將託管對象上下文(和其他對象)傳遞給UITableView子視圖。

首先,不應該需要將託管對象上下文傳遞給表的子視圖。 UITableView通過與其數據源交談來填充單元格 - 表格不知道它顯示的數據。一個表的子視圖是它的單元格,而那些來自數據源。大多數情況下,視圖控制器充當數據源和表的委託 - 如果需要了解託管對象上下文,它是數據源,並且通常是視圖控制器。

撇開不管你應該傳遞建設部表格單元格或其他子視圖的問題,讓我們來談談如何做到這一點。爲了讓一個對象直接與另一個對象通信,第一個對象需要一個指向第二個對象的指針。如果你有一個指向對象的指針,你可以向對象發送你喜歡的任何消息(儘管如果對象實現該方法,它會有很大的幫助!)。所以,第一步就是找到你想要談的觀點。

你說的是在你的表格之間實現拖放操作,所以我猜你所討論的子視圖是一個表格單元格,並且你的拖放操作涉及改變觸摸結束的單元格。通過首先將終點轉換成表格的本地座標,然後使用表格的-indexPathForRowAtPoint:方法,可以獲得觸摸結束的表格單元格。一旦你有該行的索引路徑,你可以通過-cellForRowAtIndexPath:獲得相應的單元格。使用指向單元格的指針,可以向單元格發送一條消息,以您喜歡的任何參數傳遞。

最後,如果你要採取這種方法,你可能不需要傳遞託管對象上下文本身。您的拖動所代表的數據似乎更有可能是託管對象而非託管對象上下文,因此您可能想要傳遞的託管對象。上下文是許多託管對象的容器,並且每個託管對象都有對其存在的上下文的引用,因此不需要單獨傳遞上下文。

+0

好吧,我看到你在說什麼,並感謝你的詳細答案,但我不知道這是如何工作時,兩個UITableViews有(不同)自定義類。處理拖放的代碼包含在這些類中,因此我需要訪問每個類中的核心數據對象。那有意義嗎? – aritchie

0

一個選項是創建一個自定義單元格,並將其傳遞給cellForRowAtIndexPath中的託管對象。

@interface CustomCell : UITableViewCell { 
} 
@property (weak) NSManagedObject *managedObject 
@end 

然後

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    CustomCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // get your managed object 
    NSManagedObject *managedObject = [_fetchedResultsController objectAtIndexPath:indexPath]; 

    cell.managedObject = managedObject; 
} 

等。

此外,您可能會發現使用核心數據框架(例如Sensible TableView)非常方便。該框架將自動處理爲所有單元格字段填充數據,並且還會自動生成所有細節視圖。使用Core Data可節省大量時間。

相關問題