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

Я показываю эти совпадения в виде таблицы, например:

enter image description here

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

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

2
thefabbulus 24 Апр 2016 в 19:57

4 ответа

Лучший ответ

В этом случае вам даже не нужно использовать расширяемый / аккордеон. Вот как с этим можно справиться. Допустим, размер вашей ячейки, когда нормальный - 40, а когда конкретный щелчок - 100. В heightForRowAtIndexPath вы можете проверить, какая ячейка выбрана, и вернуть больше высоты

if(selectedRow == indexPath.row) {
    return 100;
} else {
    return 40;
}

Тогда то, что вы можете сделать, это didSelectRowAtIndexPath или метод события щелчка

[self.tableView beginUpdates];
[[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: selectedRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];

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

Обновленный ответ с указанием источника

ViewController.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(selectedIndex == indexPath.row)
    return 100;
else
    return 40;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    customCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
    NSDictionary *matches = self.dataArray[indexPath.row];
    cell.matchName.text = [matches objectForKey@"MatchName"];
    if() {
        cell.heightConstraintSecondView.constant = 0;
    } else {
        cell.heightConstraintSecondView.constant = 59;
        cell.team1.text = [matches objectForKey@"Team1"];
        cell.team2.text = [matches objectForKey@"Team2"];
        cell.score.text = [matches objectForKey@"Score"];
    } 
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    selectedIndex = indexPath.row;
    [self.tableView beginUpdates];
    [[self tableView] reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tableView endUpdates];
    }
}
5
Arun Gupta 25 Апр 2016 в 07:50

Попробуйте одно из этих:

0
Klevison 2 Сен 2016 в 18:09

Более чистый способ - создать 2 ячейки с разными идентификаторами и изменить их во время выполнения, когда вы щелкаете ячейку. Отметьте этот вопрос: Раскрывающийся список в UITableView в iOS

0
Community 23 Май 2017 в 12:08

Вы можете использовать HVtableview для этой цели, попробуйте эту ссылку https://github.com/xerxes235/HVTableView

0
thefabbulus 25 Апр 2016 в 13:25