Как найти количество ячеек в UITableView
Мне нужно пропустить все ячейки в TableView и установить изображение для cell.imageView
, когда я нажимаю кнопку. Я пытаюсь получить каждую ячейку
[[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
Но мне нужно количество ячеек.
Как найти количество ячеек в TableView?
Ответы
Ответ 1
общее количество всех ячеек (в разделе) должно быть тем, что возвращается
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
однако этот метод получает счет, вы можете сделать это и в своих собственных методах. Возможно, что-то вроде return [myArrayofItems count];
Ответ 2
int sections = [tableView numberOfSections];
int rows = 0;
for(int i=0; i < sections; i++)
{
rows += [tableView numberOfRowsInSection:i];
}
Общее количество строк = строк;
Ответ 3
UITableView
предназначен только для просмотра ваших данных, взятых из источника данных.
Общее количество ячеек - это информация, которая принадлежит источнику данных, и вы должны получить от нее доступ.
UITableView
содержит достаточно ячеек, чтобы они соответствовали экрану, доступ к которому можно получить с помощью
- (NSArray *)visibleCells
Одно грязное решение - поддерживать отдельный массив из каждого созданного UITableViewCell
. Он работает, и если у вас небольшое количество ячеек, это не так уж плохо.
Однако это не очень изящное решение, и лично я бы не выбрал его, если нет другого пути. Лучше, чтобы вы не изменяли фактические ячейки в таблице без соответствующего изменения источника данных.
Ответ 4
на основе кода Biranchi, здесь небольшой фрагмент, который извлекает каждую сквозную ячейку.
Надеюсь, это поможет вам!
UITableView *tableview = self.tView; //set your tableview here
int sectionCount = [tableview numberOfSections];
for(int sectionI=0; sectionI < sectionCount; sectionI++) {
int rowCount = [tableview numberOfRowsInSection:sectionI];
NSLog(@"sectionCount:%i rowCount:%i", sectionCount, rowCount);
for (int rowsI=0; rowsI < rowCount; rowsI++) {
UITableViewCell *cell = (UITableViewCell *)[tableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowsI inSection:sectionI]];
NSLog(@"%@", cell);
}
}
Ответ 5
Swift 3.1 (по состоянию на 13 июля 2017 года)
let sections: Int = tableView.numberOfSections
var rows: Int = 0
for i in 0..<sections {
rows += tableView.numberOfRows(inSection: i)
}
Ответ 6
Пример эквивалентности Swift 3
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return 1
}else if section == 1 {
return timesArray.count // This returns the cells equivalent to the number of items in the array.
}
return 0
}