Это работает только для первой строки, потому что вы ограничиваете ее первой строкой с помощью if indexPath.row == 0
.
. Вам понадобится массив Bool
, а не один Bool
.необходимо отслеживать состояние всех строк.
Просто инициализируйте массив с массивом значений false
с количеством ваших строк.Установите соответственно NUMBER_OF_ROWS
ниже.
Затем, при выборе ячейки, вы переворачиваете (или toggle()
) логическое значение для этой строки и просите таблицу обновить.
private var isCellExpanded: [Bool] = Array(repeating: false, count: NUMBER_OF_ROWS)
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
isCellExpanded[indexPath.row].toggle()
tableView.beginUpdates()
tableView.endUpdates()
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if isCellExpanded[indexPath.row] {
return 250
} else {
return 40
}
}
Примечаниечто это предполагает, что вы используете только один раздел.В противном случае вам придется настроить структуру данных [Bool]
на [[Bool]]
.