2016-06-10 3 views
0

У меня есть UITableView, в котором включен множественный выбор. Я использовал «выбор», чтобы реально изменить высоту строк, показывая дополнительные детали, когда «выбран». Например.UITableView multi selection and swipe actions

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return (self.tableView.indexPathsForSelectedRows?.contains(indexPath) ?? false) ? 200 : 92 
} 

Это, похоже, работает очень хорошо. Пока я не начну делать какие-либо действия. Когда я добавляю какие-либо действия по удалению, действие салфетки, кажется, очищает все мои выборы. Я действительно хотел отменить выбор того, который я прокрутил, так что он будет сжиматься. Но очистка всех моих выборов не вызывает каких-либо нормальных обратных вызовов делегатов. Даже если у меня есть allowsMultipleSelectionDuringEditing, установите значение true.

Есть ли способ сделать это? Должен ли я пропускать (ab), используя состояние выбора, как способ указать, показывает ли строка детали с разной высотой или нет? Или есть способ использовать его в сочетании с поведением ударов, выполняемых в «режиме редактирования», и очисткой всех моих выборов?

+0

Сделайте этот ответ, если вы хотите, чтобы некоторые кредиторы @sticker. В итоге я закончил работу, и она отлично поработала. Итог - не злоупотреблять состояниями выбора. –

+0

двигаться, как вы предлагаете :) – Nick

ответ

1

Лучше всего использовать NSArray для хранения indexPath выбранных ячеек и основывать на сохраненных indexPath, которые вы можете проверить и сделать все, что хотите. в вашем коде может произойти еще одна ошибка: что произошло в случае, когда пользователь делает прокрутку в виде таблицы? Будет ли ячейка повторно использовать и потерять выбранное состояние? Новая ячейка повторного использования старой ячейки с 200 высотой будет иметь неправильную высоту?