2011-11-24 59 views
0

我希望有一個單一的- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,所有UITableView'旨意用於格式化等如何集中cellForRowAtIndexPath?

什麼是實現這一目標的最佳方式是什麼?

現在,我想我可以用一個單獨的類或將委託方法在我的應用程序委託和鉤UITableView的文件的所有者了這一點。但是接下來我必須提供這些類/方法訪問通常在ViewController子類中正確的數據。

怎麼會有其他人來完成這樣的事情?

編輯:爲了澄清,我不是在尋找一種方式來返回一個共同的細胞本身,而是一種方法,在我的整個應用程序的單一cellForRowAtIndexPath方法。

回答

2

如果你只是想集中所有的格式,但有數據源中分離每班你可以爲它提供了一個方法

+ (UITableViewCell*) tableViewCellForTableView:(UITableView *)tableView withType:(int)type; 

通過創建獲得通過式costants你的表格視圖單元創建一個工廠類,你可以創建一個組,然後可以通過這個類返回基本表視圖細胞。傳遞tableView以使用可重用單元非常重要。一個cellForRowAtIndexPath現在可以從那裏獲取的細胞,並將其配置根據數據

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [MyCellFactory tableViewCellForTableView:tableView withType:kMyTypePlain]; 

    cell.textLabel.text = ....; 
} 
+0

我不希望集中細胞的獲得,我期待集中整個方法。我希望像'cell.textLabel.text = ....;'這樣的代碼位於一個地方,而不必在每個ViewController中調用'cellForRowAtIndexPath'。 – barfoon

+0

然後你一定要給這個中央方法訪問所有數據。如果您可以找到與所有表視圖相同的「通用」數據表示,那麼只要數據格式正確,中央方法不關心數據源,這可能是可行的。我認爲人們必須仔細設計,因爲很容易創建一個使代碼比一組獨立方法更復雜的構造。 –

+0

對,那麼我如何實現這個「中心」方法,具體是什麼? – barfoon

0

您可以考慮使用您的ViewController一個objective-c category它實現了cellForRowAtIndexPath方法。

如果你在這個方法中做了一些非常複雜的事情,我建議你只是創建一個包含你的單元格的nib文件,然後將它加載到cellFoRowAtIndexPath。你甚至可以創建一個繼承自UITableViewCell的類,並在那裏粘貼你自己的方法/屬性。我強烈推薦這種方法。

您可以加載筆尖,說「MyCustomTableCell.nib」,其中包含您的自定義UITableViewCell像這樣:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomTableCell" 
                 owner:self 
                 options:nil]; 
MyCustomTableCell* cell = [topLevelObjects objectAtIndex:0]; 
0

我認爲你可以使用從@TriPhoenix對於大多數這個問題的答案。

我想補充的唯一額外的事情是,你可能與呼叫工廠一起發送的數據。

[MyCellFactory cellForTableView:tableView withType:kMyTypePlain data:data]; 

當然,你必須確保data響應的通用接口,以確保您可以輕鬆地設置例如東西確保每個對象響應類似的方法,如

cell.textLabel.text = data.textLabelText; 

如果你喜歡,你可以使用協議做到這一點。這取決於你如何構建你的數據。

相關問題