У меня есть кнопка переключения, чтобы скрыть и показать раздел в виде таблицы
скажем, у меня есть три раздела, которые определены в массиве:
var sections = ["section1", "section2", "section3"]
а вот и табличные протоколы просмотра разделов
override func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
а вот функция, которая будет вызываться при смене переключателя кнопки переключения:
@objc func switchStateDidChange(_ sender: UISwitch) {
sections.remove(at: 1)
// My problem is here
tableView.deleteSections(IndexSet, with: .top)
}
В этой функции я сначала сказал, что количество секций в массиве секций уменьшится на единицу, затем удаляем секцию 1
но если я поставлю 1 в IndexSet, я получаю эту ошибку:
Cannot convert value of type 'Int' to expected argument type 'IndexSet'
Как я могу сказать tableView.deleteSections
удалить раздел 1?
Вы должны создать конкретный IndexSet
экземпляр из Int
tableView.deleteSections(IndexSet(integer: 1), with: .top)
или используйте метод init(arrayLiteral:
IndexPath
, который выводит массив Int
tableView.deleteSections([1], with: .top)
Большое спасибо за вашу помощь, после добавления я получил эту ошибку Тема 1: сигнал SIGABRT
Какое исключение вы получаете? Вне диапазона? Вам также может понадобиться удалить строки.
Можешь попробовать
tableView.deleteSections([0], with: .top)
измените значение на любой индекс, который вам нужен
Большое спасибо за вашу помощь, после добавления я получил эту ошибку Тема 1: сигнал SIGABRT
Вы должны убедиться, что делаете пару вещей при обновлении UITableView
.
Убедитесь, что вы удалили данные из массива, который использует tableView
.
Убедитесь, что когда вы обновляете массив, он не обновляет tableView, например, вы наблюдатель или didSet
в массиве.
Убедитесь, что раздел доступен, прежде чем пытаться обновить
Скажите tableView, что вы собираетесь делать обновления
let removeSection = 0
if tableView.numberOfSections >= removeSection+1 {
tableView.beginUpdates()
tableView.deleteSections([removeSection], with: .top)
tableView.endUpdates()
}
beginUpdates/endUpdates
в данном случае не имеет никакого эффекта.
Не идеально делать обновления tableView без них - есть еще несколько вещей, которые нужно проверить в соответствии с моими обновлениями.
beginUpdates/endUpdates
полезен только в том случае, если операции несколькоinsert/delete/move
выполняются одновременно. Это совершенно бессмысленно для операции Один. Это четко описано в документации.
Вы использовали массив секций где-нибудь еще? показать коды numberofrows и cellforrow