Может кто - нибудь сказать мне способ выполнения UITableView
расширяющихся / разборные анимации в sections
из UITableView
ниже?
или
ios
iphone
uitableview
object
vinnitu
источник
источник
Ответы:
Вы должны создать свою собственную строку заголовка и поместить ее в качестве первой строки каждого раздела. Создание подкласса
UITableView
заголовков или, которые уже есть, будет проблемой. Судя по тому, как они работают сейчас, я не уверен, что вы легко сможете добиться от них действий. Вы можете настроить ячейку так, чтобы она выглядела как заголовок, и настроитьtableView:didSelectRowAtIndexPath
вручную развернуть или свернуть раздел, в котором она находится.Я бы сохранил массив логических значений, соответствующих «израсходованному» значению каждого из ваших разделов. Затем вы можете
tableView:didSelectRowAtIndexPath
переключить это значение в каждой из ваших настраиваемых строк заголовка, а затем перезагрузить этот конкретный раздел.Затем установите
numberOfRowsInSection
для проверкиmybooleans
значения и возврата 1, если раздел не развернут, или 1+ количество элементов в разделе, если он развернут.Кроме того, вам нужно будет обновить,
cellForRowAtIndexPath
чтобы вернуть настраиваемую ячейку заголовка для первой строки в любом разделе.источник
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
- лучший способ предоставить свой «собственный настраиваемый заголовок», поскольку именно для этого он предназначен.Некоторый образец кода для анимации действия развертывания / свертывания с использованием заголовка раздела табличного представления предоставлен Apple здесь: Анимации и жесты табличного представления
Ключом к этому подходу является реализация
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
и возврат настраиваемого UIView, который включает кнопку (обычно такого же размера, как и само представление заголовка). Создав подкласс UIView и используя его для представления заголовка (как в этом примере), вы можете легко сохранить дополнительные данные, такие как номер раздела.источник
dequeueReusableHeaderFooterViewWithIdentifier
) - щелкните эту стрелку и прокрутите до первого воспроизведения и попробуйте закрыть его -> NSInternalInconsistencyException (iOS 8.4 / iPhone 5s)Я получил хорошее решение, вдохновленное анимацией и жестами табличного представления Apple . Я удалил ненужные части из образца Apple и перевел его в Swift.
Я знаю, что ответ довольно длинный, но весь код необходим. К счастью, вы можете просто скопировать и вставить большую часть кода, и вам просто нужно немного изменить на шагах 1 и 3.
1. создать
SectionHeaderView.swift
иSectionHeaderView.xib
SectionHeaderView.xib
(вид с серым фоном) должно выглядеть примерно так в Tableview (вы можете настроить его в соответствии с вашими потребностями, конечно):нота:
а)
toggleOpen
действие должно быть связано сdisclosureButton
б)
disclosureButton
иtoggleOpen
действия не являются необходимыми. Вы можете удалить эти две вещи, если вам не нужна кнопка.2. создать
SectionInfo.swift
3. в вашем tableview
источник
Чтобы реализовать раздел сворачиваемой таблицы в iOS, волшебство состоит в том, как контролировать количество строк для каждого раздела или мы можем управлять высотой строк для каждого раздела.
Кроме того, нам нужно настроить заголовок раздела, чтобы мы могли прослушивать событие касания из области заголовка (будь то кнопка или весь заголовок).
Как бороться с заголовком? Это очень просто, мы расширяем класс UITableViewCell и делаем настраиваемую ячейку заголовка следующим образом:
затем используйте viewForHeaderInSection, чтобы подключить ячейку заголовка:
помните, что мы должны вернуть contentView, потому что эта функция ожидает возврата UIView.
Теперь давайте разберемся со складной частью, вот функция переключения, которая переключает складную опору каждой секции:
зависит от того, как вы управляете данными раздела, в этом случае у меня есть данные раздела примерно так:
наконец, то, что нам нужно сделать, основано на складной опоре каждой секции, контролировать количество строк этой секции:
У меня есть полностью рабочая демонстрация на моем Github: https://github.com/jeantimex/ios-swift-collapsible-table-section
Если вы хотите реализовать складные разделы в таблице сгруппированного стиля, у меня есть еще одна демонстрация с исходным кодом здесь: https://github.com/jeantimex/ios-swift-collapsible-table-section-in-grouped-section
Надеюсь, это поможет.
источник
У меня есть лучшее решение: вы должны добавить UIButton в заголовок раздела и установить размер этой кнопки, равный размеру раздела, но сделать его скрытым с помощью прозрачного цвета фона, после чего вы легко можете проверить, какой раздел нажат, чтобы развернуть или свернуть
источник
tableView:numberOfRowsInSection:
останется нетронутым, и вы по-прежнему сможете использовать его для того, что он на самом деле означает. То же самое и сtableView:cellForRowAtIndexPath:
.UITableViewHeaderFooterView
добавляетsection
свойство и определяет a,SectionHeaderViewDelegate
который обеспечивает обратный вызов для открытия / закрытия раздела. ( developer.apple.com/library/ios/samplecode/TableViewUpdates/… )Я закончил тем, что просто создал headerView, который содержал кнопку (я видел решение Сона Нгуена выше, но вот мой код ... это выглядит много, но довольно просто):
объявить пару bools для ваших разделов
...код
теперь в ваших методах делегата tableview ...
и, наконец, функция, которая вызывается при нажатии одной из кнопок заголовка раздела:
источник
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
метода свертывания / разворачивания, оно должно красиво анимироваться.Это лучший способ создания расширяемых ячеек табличного представления.
.h файл
.m файл
Методы делегата табличного представления
источник
Итак, на основе решения «кнопка в заголовке» вот чистая и минималистичная реализация:
Вот код:
источник
Я нашел еще один относительно простой способ решить эту проблему. Используя этот метод, нам не потребуется изменять нашу ячейку, которая почти всегда связана с индексом массива данных, что может вызвать беспорядок в нашем контроллере представления.
Сначала мы добавляем следующие свойства в наш класс контроллера:
collapsedSections
сохранит номера свернутых разделов.sectionViews
сохранит наш пользовательский вид сечения.Синтезируйте это:
Инициализируйте его:
После этого мы должны подключить наш UITableView, чтобы к нему можно было получить доступ из нашего класса контроллера представления:
Подключите его из XIB для просмотра контроллера,
ctrl + drag
как обычно.Затем мы создаем представление как настраиваемый заголовок раздела для нашего табличного представления, реализуя этот делегат UITableView:
Затем мы реализуем метод для сохранения нашего ранее созданного заголовка настраиваемого раздела в свойстве класса:
Добавьте
UIGestureRecognizerDelegate
в наш файл контроллера представления .h:Затем мы создаем метод
attachTapGestureToView:
Вышеупомянутый метод добавит распознаватель жестов касания ко всем видам сечения, которые мы создали ранее. Далее мы должны реализовать
onTap:
селекторВышеупомянутый метод будет вызван, когда пользователь коснется любого раздела нашего табличного представления. Этот метод ищет правильный номер раздела на основе нашего
sectionViews
ранее созданного массива.Кроме того, мы реализуем метод определения того, к какой части заголовка относится.
Далее мы должны реализовать метод
toggleCollapseSection:
Этот метод вставит / удалит номер раздела в нашем
collapsedSections
массиве, который мы создали ранее. Когда номер раздела вставлен в этот массив, это означает, что раздел должен быть свернут и развернут, если в противном случае.Далее мы реализуем
removeCollapsedSection:
,addCollapsedSection:section
иisCollapsedSection:section
Эти три метода просто помогают нам получить доступ к
collapsedSections
массиву.Наконец, реализуйте этот делегат табличного представления, чтобы наши настраиваемые представления секций выглядели красиво.
Надеюсь, поможет.
источник
Я использовал NSDictionary в качестве источника данных, это похоже на большой объем кода, но он действительно прост и работает очень хорошо! как здесь выглядит
Я создал перечисление для разделов
свойство разделов:
Метод, возвращающий мои разделы:
А затем настройте мои данные:
Следующие методы помогут вам узнать, когда открывается раздел и как реагировать на источник данных tableview:
Ответьте раздел на источник данных:
Инструменты:
Переключить видимость раздела
источник
// vKj
источник
// vKj
источник
Расширяя этот ответ, написанный на Objective C, я написал следующее для тех, кто пишет на Swift
Идея состоит в том, чтобы использовать разделы в таблице и установить количество строк в разделе на 1 (свернутый) и 3 (развернутый) при нажатии на первую строку в этом разделе.
Таблица решает, сколько строк рисовать на основе массива логических значений.
Вам нужно будет создать две строки в раскадровке и присвоить им идентификаторы повторного использования CollapsingRow и GroupHeading.
источник
Некоторые образцы кода для анимации действия развертывания / свертывания с использованием заголовка раздела табличного представления предоставлены Apple в разделе « Анимации и жесты табличного представления» .
Ключом к такому подходу является реализация
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
и вернуть пользовательский UIView, который включает кнопку (обычно такого же размера, как и само представление заголовка). Создав подкласс UIView и используя его для представления заголовка (как в этом примере), вы можете легко сохранить дополнительные данные, такие как номер раздела.
источник
Я проделал то же самое, используя несколько разделов.
источник
Я добавляю это решение для полноты и показываю, как работать с заголовками разделов.
Ссылка на суть: https://gist.github.com/pawelkijowskizimperium/fe1e8511a7932a0d40486a2669316d2c
источник
в поддержку решения @ jean.timex используйте приведенный ниже код, если вы хотите открыть один раздел в любое время. создайте переменную типа: var extendedSection = -1;
источник