it-swarm-ru.tech

Как найти количество ячеек в UITableView

Мне нужно перебрать все ячейки в TableView и установить изображение для cell.imageView, когда я нажимаю кнопку. Я пытаюсь получить каждую клетку

[[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];

Но мне нужно количество клеток.

Как найти количество ячеек в TableView?

19
sujith1406

общее количество всех ячеек (в разделе) должно быть таким, какое возвращает

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

однако этот метод получает счет, вы можете сделать это и своими методами. Вероятно, что-то вроде return [myArrayofItems count];

16
Jason Bugs Adams
int sections = [tableView numberOfSections]; 

int rows = 0; 

for(int i=0; i < sections; i++)
{
    rows += [tableView numberOfRowsInSection:i];
}

Общее количество строк = строк;

41
Biranchi

UITableView предназначен только для просмотра ваших данных, взятых из источника данных . Общее количество ячеек - это информация, которая принадлежит источнику данных, и вы должны получить к ней доступ оттуда. UITableView содержит достаточно ячеек, чтобы поместиться на экране, доступ к которому можно получить с помощью 

- (NSArray *)visibleCells

Одним из грязных решений было бы поддерживать отдельный массив для каждой создаваемой переменной UITableViewCell. Это работает, и если у вас мало клеток, это не так уж плохо. 

Тем не менее, это не очень элегантное решение, и лично я не выбрал бы это, если бы не было абсолютно никакого другого пути. Лучше, чтобы вы не изменяли фактические ячейки в таблице без соответствующего изменения в источнике данных.

6
Andrei Stanescu

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

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);
    }
}
4
Louis de Decker

Swift 3.1 (по состоянию на 13 июля 2017 г.)

let sections: Int = tableView.numberOfSections
var rows: Int = 0

for i in 0..<sections {
    rows += tableView.numberOfRows(inSection: i)
}
1
BennyTheNerd

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
    }
0
user44776

Расширение для UITableView для получения общего количества строк. Написано в Swift 4

extension UITableView {

    var rowsCount: Int {
        let sections = self.numberOfSections
        var rows = 0

        for i in 0...sections - 1 {
            rows += self.numberOfRows(inSection: i)
        }

        return rows
    }
}
0
mkul