Количество строк в разделе - PullRequest
0 голосов
/ 26 июня 2018

В Моем Расширяемом UITableview количество секций 5 [SectionItems.count].

Моя цель состоит в том, чтобы пронумеровать все ячейки в разделах от 1 до количества всех строк (нумерация не должна учитывать разделы).

enter image description here

это мой код для подсчета строк

NSInteger count = 0;
for (NSInteger sec=0; sec < indexPath.section; sec++) {
    NSInteger rows = [tableView numberOfRowsInSection:sec];
    count += rows;
}
count += indexPath.row + 1;


NSArray *sect = [sectionItem objectAtIndex:indexPath.section];
cell.titleLbl.text = [NSString stringWithFormat:@"%ld %@",(long)count,[sect objectAtIndex:indexPath.row]];

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

enter image description here

Проблема в том, что в первом разделе (схема управления версиями) есть строка, поэтому эти два числа должны быть 2 и 3 вместо 1 и 2.

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я бы сделал некоторую структуру, например, массив разделов, и каждый раздел должен иметь заголовок и массив строк.В стиле JSON, что-то вроде:

[
    {
        "section_title": "My section 1",
        "section_rows": [
            {"title": "Lecture 1"},
            {"title": "Lecture 2"}
        ]
    },
    {
        "section_title": "My section 2",
        "section_rows": [
            {"title": "Lecture 3"},
            {"title": "Lecture 4"}
        ]
    }
]

При этом ваши методы будут выглядеть примерно так:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return myArray.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    __weak NSDictionary *section = myArray[section];
    return [section[@"section_rows"] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    __weak NSDictionary *lecture = myArray[indexPath.section][@"section_rows"][indexPath.row];
    // Configure your cell here
}

// This method should probably be replaced with this one from UITableViewDelegate:
// - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    __weak NSDictionary *sectionInfo = myArray[section];
    return sectionInfo[@"title"];
}

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

Надеюсь, это то, что вы просите, я не совсемточно, что вы подразумеваете под "расширяемым" представлением таблицы.

0 голосов
/ 26 июня 2018

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

Каждый раз, когда вы обновляете данные строки, вы должны возвращать нумерацию

- (NSArray *)numberCells {
    NSArray *numbersArray = [[NSArray alloc] init];
    NSInteger num = 1;
    for (NSArray *ar in sectionItem) {
        NSArray *rowArray = [[NSArray alloc] init];
        for (id item in ar) {
            rowArray = [rowArray arrayByAddingObject:[NSNumber numberWithInteger:num]];
            num += 1;
        }
        numbersArray = [numbersArray arrayByAddingObject:rowArray];
    }
    return numbersArray;
}

Обновлять свойство массива, когданужно вот так: myArray = [self numberCells]; тогда получите номер ячейки вот так:

NSArray *rowArray = [numbersArray objectAtIndex:indexPath.section];
NSNumber *num = [rowArray objectAtIndex:indexPath.row];

Удачи!

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