Я использую UITableView
в своем приложении для iPhone, и у меня есть список людей, которые принадлежат к группе. Мне бы хотелось, чтобы, когда пользователь нажимает на конкретного человека (выбирая таким образом ячейку), высота ячейки увеличивается, чтобы отобразить несколько элементов управления пользовательского интерфейса для редактирования свойств этого человека.
Это возможно?
источник
You can also use this method followed by the endUpdates method to animate the change in the row heights without reloading the cell.
developer.apple.com/library/ios/documentation/UIKit/Reference/…Мне нравится ответ Саймона Ли. На самом деле я не пробовал этот метод, но, похоже, он изменит размер всех ячеек в списке. Я надеялся на изменение только той ячейки, которая прослушивается. Я вроде сделал это как Саймон, но с небольшой разницей. Это изменит внешний вид ячейки при ее выборе. И это оживляет. Просто еще один способ сделать это.
Создайте int для хранения значения для текущего выбранного индекса ячейки:
Затем:
Затем:
Я уверен, что вы можете внести аналогичные изменения в tableView: cellForRowAtIndexPath: изменить тип ячейки или даже загрузить файл XIB для ячейки.
Таким образом, currentSelection начнется с 0. Вам нужно будет внести коррективы, если вы не хотите, чтобы первая ячейка списка (с индексом 0) выглядела выделенной по умолчанию.
источник
Добавить свойство для отслеживания выбранной ячейки
Установите его в значение часового значения (например)
viewDidLoad
, чтобы убедиться, чтоUITableView
пуски находятся в «нормальном» положенииВ
heightForRowAtIndexPath
вы можете установить высоту, которую вы хотите для выбранной ячейкиВ
didSelectRowAtIndexPath
вас сохранить текущий выбор и сохранить высоту динамического, если требуетсяВ
didDeselectRowAtIndexPath
установить индекс выбора обратно к значению дозорного и анимировать спину клеток к нормальной формеисточник
reloadData не годится, потому что нет анимации ...
Вот что я сейчас пытаюсь:
Это почти работает правильно. Почти. Я увеличиваю высоту ячейки, и иногда в представлении таблицы происходит небольшой «сбой» при замене ячейки, как будто сохраняется некоторая позиция прокрутки в представлении таблицы, новая ячейка (которая является первой ячейкой). в таблице) заканчивается слишком большим смещением, и представление прокрутки отскакивает, чтобы изменить его положение.
источник
Я не знаю, что все эти вещи о последовательном вызове beginUpdates / endUpdates, вы можете просто использовать
-[UITableView reloadRowsAtIndexPaths:withAnimation:]
. Вот пример проекта .источник
Я решил с
reloadRowsAtIndexPaths
.Я сохраняю в
didSelectRowAtIndexPath
indexPath выбранной ячейки и вызываюreloadRowsAtIndexPaths
в конце (вы можете отправить NSMutableArray для списка элементов, которые вы хотите перезагрузить).В
heightForRowAtIndexPath
вы можете проверить , если indexPath в списке или не expandIndexPath ячейки и высоты отправки.Вы можете проверить этот базовый пример: https://github.com/ferminhg/iOS-Examples/tree/master/iOS-UITableView-Cell-Height-Change/celdascambiadetam Это простое решение.
Я добавлю код, если вам поможет
источник
Вместо
beginUpdates()
/endUpdates()
, рекомендуемый вызов теперь:Apple говорит в отношении beginUpdates / endUpdates: «При возможности используйте метод executeBatchUpdates (_: завершение :) вместо этого».
См .: https://developer.apple.com/documentation/uikit/uitableview/1614908-beginupdates.
источник
Попробуйте это для расширения индексной строки:
источник
источник
просто заметка для кого-то вроде меня, ищущего добавить "Подробнее" в пользовательской ячейке.
Проделали отличную работу, но не забудьте «обрезать» вид клетки. В Интерфейсном Разработчике выберите «Ячейка» -> «Просмотр содержимого» -> из «Инспектора свойств» выберите « Подвид клипа »
источник
Вот более короткая версия ответа Саймонса для Swift 3. Также позволяет переключать выбор ячейки
источник
Свифт 4 и выше
добавьте приведенный ниже код в метод делегата didselect строки tableview
источник
Свифт версия ответа Саймона Ли.
Затем в didSelectRowAtIndexPath ()
источник
Да, это возможно.
UITableView
имеет метод делегатаdidSelectRowAtIndexPath
Но в вашем случае, если пользователь прокручивает и выбирает другую ячейку, тогда вам нужно иметь последнюю выбранную ячейку, чтобы уменьшить и расширить текущие выбранные
reloadRowsAtIndexPaths:
вызовы ячейки,heightForRowAtIndexPath:
поэтому обрабатывайте соответственно.источник
Вот мой код пользовательского
UITableView
подкласса, который расширяетсяUITextView
в ячейке таблицы без перезагрузки (и потерял фокус клавиатуры):источник
Я использовал потрясающий ответ @ Joy, и он отлично работал с ios 8.4 и XCode 7.1.1.
Если вы хотите, чтобы ваша ячейка переключалась, я изменил -tableViewDidSelect следующим образом:
Я надеюсь, что все это помогло вам.
источник
Проверьте этот метод после iOS 7 и позже.
Улучшения были сделаны в iOS 8. Мы можем установить его как свойство самого табличного представления.
источник
Свифт версия ответа Саймона Ли :
Имейте в виду, что вы должны изменить свойства высоты ДО
endUpdates()
.источник
Входы -
tableView.beginUpdates () tableView.endUpdates () эти функции не будут вызывать
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {}
Но, если вы это сделаете, tableView.reloadRows (в: [selectedIndexPath! As IndexPath], с: .none)
Эта функция вызовет func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {} .
источник
Я только решил эту проблему с небольшим взломом:
Когда мне нужно увеличить высоту ячейки, я устанавливаю
isInEdit = YES
и вызываю метод,[self onTimer]
и он оживляет рост ячейки, пока не достигнет значения s_CellHeightEditing :-)источник
Получить указатель пути выбранной строки. Перезагрузите стол. В методе heightForRowAtIndexPath объекта UITableViewDelegate установите высоту выбранной строки на другую высоту, а для остальных верните обычную высоту строки.
источник
[table reloadData]
результатов в изменении высоты происходит мгновенно, а не анимация.