Один метод, который я использовал один или два раза, - это вложенная серия объектов NSArray, которые я инициализирую в viewDidLoad
:
// 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 и использовать метод initWithContentsOfFile:
NSArray, чтобы прочитать его. Однако вам понадобится какое-то волшебство KVC, чтобы получить объекты ячеек из строк в вашем массиве:
return [self valueForKey:[[cellTree objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]];