Я собрал небольшой пример проекта, чтобы показать моим начинающим ученикам, как использовать Swift для удаления и перемещения строк tableView. Проект содержит массив String, members, в котором перечислены члены ЕС (они будут удалять Великобританию - извинения, если это будет болезненным примером для некоторых британцев. У вас есть мои симпатии). GIF ниже был создан на iPhone с кодом ниже. В демонстрации ниже Великобритания удаляется, затем нажимается «Редактировать», чтобы войти в режим редактирования, и Польша перетаскивается наверх. Обратите внимание, как две страны, Италия и Болгария, похоже, удалили значок удаления во время перемещения. Возможно, мне не хватает чего-то смущающе очевидного, но я считаю, что мой код соответствует многим онлайн-примерам и рабочему коду, который я использовал в прошлом. Пожалуйста, дайте мне знать, если я что-то упустил и что нужно изменить, или если это выглядит хорошо, и это проблема Apple. Я использую Xcode 11.3.1 и аналогичные поведенческие шоу на симуляторе + iOS 13.3 на iPhone 11 Pro. Ma c работает Catalina 10.15.3 Thx, J
@IBAction, которое я написал для editButtonPressed + расширение с четырьмя функциями tableView, показано ниже. Полный код (только один файл контроллера представления) находится в этой сущности: https://gist.github.com/gallaugher/3eab69068de93daea686c1863defe31f
@IBAction func editButtonPressed(_ sender: UIBarButtonItem) {
if tableView.isEditing {
tableView.setEditing(false, animated: true)
sender.title = "Edit"
addBarButton.isEnabled = true
} else {
tableView.setEditing(true, animated: true)
sender.title = "Done"
addBarButton.isEnabled = false
}
}
// код выше в основном классе ViewController. Код ниже является расширением в том же файле .swift, что и класс.
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("? numberOfRowsInSection was just called. Returning \(members.count)")
return members.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print("?♂️ cellForRowAt was just called for indexPath.row = \(indexPath.row) which is the cell containing \(members[indexPath.row])")
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = members[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
members.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let itemToMove = members[sourceIndexPath.row]
members.remove(at: sourceIndexPath.row)
members.insert(itemToMove, at: destinationIndexPath.row)
}
}