Подтвердить что ты не робот

Развернуть ячейку UITableView в UITableViewstylePlain

Я хочу развернуть ячейку tableview на ней. Существует таблица, в которой две ячейки расширяемы, а другие нет. Мне нужно, когда я нажимаю на расширяемую ячейку, он должен показывать под ним ячейки, а при повторном нажатии он должен скрываться. Ниже приведено изображение.

enter image description here

Как я могу достичь этой функциональности, пожалуйста, руководствуйтесь приведенным выше. Спасибо заранее.

4b9b3361

Ответ 1

Здесь - это полное учебное пособие с расширяемым UITableView

Для этого нужен снимок кода.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self tableView:tableView canCollapseSection:indexPath.section])
    {
        if (!indexPath.row)
        {
            // only first row toggles exapand/collapse
            [tableView deselectRowAtIndexPath:indexPath animated:YES];

            NSInteger section = indexPath.section;
            BOOL currentlyExpanded = [expandedSections containsIndex:section];
            NSInteger rows;

            NSMutableArray *tmpArray = [NSMutableArray array];

            if (currentlyExpanded)
            {
                rows = [self tableView:tableView numberOfRowsInSection:section];
                [expandedSections removeIndex:section];

            }
            else
            {
                [expandedSections addIndex:section];
                rows = [self tableView:tableView numberOfRowsInSection:section];
            }

            for (int i=1; i<rows; i++)
            {
                NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i 
                                                               inSection:section];
                [tmpArray addObject:tmpIndexPath];
            }

            UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

            if (currentlyExpanded)
            {
                [tableView deleteRowsAtIndexPaths:tmpArray 
                                 withRowAnimation:UITableViewRowAnimationTop];

                cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown];

            }
            else
            {
                [tableView insertRowsAtIndexPaths:tmpArray 
                                 withRowAnimation:UITableViewRowAnimationTop];
                cell.accessoryView =  [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp];

            }
        }
    }
}

как показано на рисунке ниже

enter image description here

Это и это, одно из решений также поможет вам понять, как управлять расширяемым TableView

Ответ 2

Хорошо, я думаю, что названия, События, Накладные расходы и Друзья будут настраиваться UIView с UIImageView для фона, UILabel для заголовка и UIButton для расширения. Итак, в основном

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

имеет счетчик возвратов названий, которые у вас есть.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

с возвратом UIView для каждого заголовка.

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

имеет счет строк в этом заголовке. Возможно, вам понадобится поддерживать массив для этого.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

с высотой элемента ячейки

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Вам может понадобиться хорошая логика для установки всех строк для расширения

Ваши кнопки расширения работают примерно так,

- (void) expandSection:(UIButton *)sender;

что вы можете определить, какой раздел будет расширяться с помощью sender.tag, поэтому не забудьте добавить тег правильно. Вам может понадобиться файл int в .h для хранения текущего раздела и его можно использовать в - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section методе источника данных.

Ответ 3

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

Ответ 4

Я привел пример исходного кода ниже. Вы можете настроить этот пример на основе вашего требования.

Ссылка на исходный код: Нажмите здесь

Экран вывода:

enter image description here

Ответ 6

Это возможно делегатом

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
       //write code here
    }

Ответ 7

Принятый ответ верен, но ссылка устарела. Чтобы получить этот пример для работы, вам нужно сделать дополнительные вещи:

Загрузить проект ExpandableTableCells отсюда:
https://github.com/cocoanetics/Examples

Загрузите файлы DTCustomColoredAccessory.h и .m отсюда: https://github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS

Поместите файлы DTCustomColoredAccessory в проект ExpandableTableCells.

Там у вас есть рабочий пример, его легче редактировать и перемещать оттуда вместо того, чтобы пытаться писать с нуля.