UITableView Проблема с разделами - PullRequest
2 голосов
/ 12 января 2010

У меня есть весь код, написанный для разделения NSMutableArray на разделы для UITableView. Но в cellForRowAtIndexPath я обнаружил, что indexPath.row возвращает только строку для текущего раздела. Есть ли способ просто предоставить номер строки для всего UITableView. Если кому-то понадобится увидеть код, я прикреплю его, но я не думаю, что будет очень полезно ответить на этот вопрос, за исключением случаев, когда мне нужно использовать другой алгоритм для поиска cellForRow.

Ответы [ 3 ]

2 голосов
/ 12 января 2010

Да, свойство row indexPath - это строка в разделе, поэтому вам нужно сохранить массив массивов (массив для каждого раздела). Что-то вроде:

// an array of arrays, one for each section
NSArray * _sectionDataArray;

Когда вы создаете индекс, вы создаете массив для каждого раздела и сохраняете его в _sectionDataArray. Для этого вам нужно создать объект NSMutableDictionary с ключом заголовков вашего раздела, содержащий массив CellThing (объект, содержащий данные вашей ячейки). Когда у вас есть словарь, вы можете просто взять массив для каждой буквы и вставить его в _sectionDataArray.

В вашем методе cellForRowAtIndexPath вы можете получить доступ к данным ячейки, получив массив сечения следующим образом:

NSArray * sectionArray = [_sectionDataArray objectAtIndex:indexPath.section];

Получив массив разделов, вы можете получить доступ к отдельным данным ячейки, которые вам нужны, используя строку в indexPath :

CellThing * cellObject = [sectionArray objectAtIndex:indexPath.row];
1 голос
/ 19 января 2010

Если вы действительно хотите преобразовать индексный путь в абсолютное число строк, вы можете сделать это:

// Start with row offset
int absoluteRow = indexPath.row;
// Add count of rows from all earlier sections
int s;
for (s = 0; s < indexPath.section; s++) {
    absoluteRow += [tableView numberOfRowsInSection:s];
}

Но, вероятно, лучше организовать данные так, чтобы они соответствовали структуре вашей таблицы.

0 голосов
/ 19 января 2010

Ну, очевидно, у вас есть какой-то способ узнать, сколько строк должно быть для каждого раздела - вы предоставляете это в виде таблицы: rowInSection: метод.

Ради аргумента я предполагаю, что в каждом разделе есть фиксированное количество строк, поэтому индексом в массиве будет indexPath.section * kNumOfRowsInSection + indexPath.row

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...