Получить все ячейки в UITableView?



Мне нужно получить массив всех ячеек в моем UITableView. В настоящее время я использую следующий метод:



-(NSArray *)allTableViewCellsArray
{
NSMutableArray *cells = [[NSMutableArray alloc] init];

for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
{
for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
{
[cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
}
}

return cells;
}


У меня был некоторый успех с ним, однако я пришел, чтобы обнаружить, что он падает, когда клетка не видна. Итак, как я могу получить массив всех ячеек в моем UITableView независимо от того, видны они или нет?

469   3  

3 ответов:

Вы повторно используете ячейки таблицы в своей реализации? Если это так, я думаю, что вы не можете получить все объекты UITableViewCell из вашего UITableView из-за логики повторного использования ячейки UITableView.

Поэтому вам нужно будет "отключить" механику повторного использования ячеек в вашем коде. Это можно сделать, не создавая очереди (т. е. больше не используя метод dequeueReusableCellWithIdentifier) в ваших ячейках внутри метода cellForRowAtIndexPath делегата источника данных табличного представления и передавая nil для свойства reuseIdentifier для ячейки init метод (initWithStyle:reuseIdentifier:).

Тогда ваш метод allTableViewCellsArray, вероятно, сработает! Но я думаю, что тебе все равно не повезет с этим делом.

Из документов Apple для [tableView cellForRowAtIndexPath:]:

Return Value

An object representing a cell of the table or nil if the cell is not visible or indexPath is out of range.

Нашел решение. Вместо того, чтобы захватить все ячейки в любой момент времени, который я выберу, поскольку это не работает; я создаю массив всех ячеек, как они сделаны, таким образом, каждая ячейка повторяется через смысл, я могу добавить их все в массив.

Я делаю это в методе willDisplayCell.

for (UIView *view in TableView.subviews) {
    for (tableviewCell *cell in view.subviews) {
       //do
    }
}

Comments

    Ничего не найдено.