簡體   English   中英

根據UITableView中的位置返回不同單元格的最佳方法是什么

[英]What's the best way to return different cells depending on position in a UITableView

我有一個分組的UITableView,它具有3個部分,每個部分中有許多單元格,每個單元格需要是一個不同的自定義單元格,並具有不同的顯示要求。

我目前在cellForRowAtIndexPath中有一個很大的if語句,每個分支都基於查詢indexPath的section和row屬性來實例化並返回適當的自定義單元格。 例如

if (indexPath.section == 0 && indexPath.row == 0) {
    // instantiate and return cell A
} else if (indexPath.section == 1 && indexPath.row == 2) {
    // instantiate and return cell B
} //etc etc

這種情況下的最佳做法是什么? 大型的if語句可以完成任務,但這是最佳的實現嗎?

我使用過一次或兩次的一種方法是在viewDidLoad初始化的一系列嵌套NSArray對象:

// sec<n>Row<n>Cell are IB Outlets to UITableViewCell objects defined in your .xib
NSArray *firstSectionRows = [[NSArray alloc] initWithObjects: sec1row1Cell, sec1row2cell, nil];
NSArray *secondSectionRows = [[NSArray alloc] initWithObjects: sec2row1Cell, sec2row2cell, nil];

// cellTree is an instance variable
cellTree = [[NSArray alloc] initWithObjects: firstSectionRows, secondSectionRows, nil];
[firstSectionRows release];
[secondSectionRows release];

然后在您的tableView:cellForRowAtIndexPath:方法中將如下所示:

...
return [[cellTree objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
...

這假定每個單元都是唯一的,在這種情況下,您甚至不需要嘗試使可重復使用的單元出隊。 如果任何部分中有多個相同類型的單元格,則必須適當地創建/出列它們,並為其分配唯一的單元格類型標識符。

如果您的結構很大或很復雜,則可以在.plist文件中進行數組設置,並使用NSArray的initWithContentsOfFile:方法讀取它。但是,您必須做某種KVC魔術才能從數組中獲取單元格對象。數組中的字符串:

return [self valueForKey:[[cellTree objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]];

在復雜的表視圖上,我曾考慮將UITableViewDataSource例程拆分為多個子代理,每個部分一個委托。 因此,對於3個部分,我將創建3個單獨的對象,每個對象負責為表的該部分提供UITableViewDataSource方法。 然后,UITableView的委托就根據請求所在的部分將其分派到適當的子代理之一。

到目前為止,最好的方法已在可可與愛中的這篇文章中描述。 基本上,它是每種單元格類型的自定義控制器,但最終實現起來非常簡單。

我認為這是非常普遍的做法。 只需確保為這些不同的單元指定唯一的單元格標識符即可 這樣,單元的緩存就可以正常工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM