iOS ошибка с tableView (_: moveRowAt) или я что-то упустил? - PullRequest
0 голосов
/ 05 февраля 2020

Я собрал небольшой пример проекта, чтобы показать моим начинающим ученикам, как использовать 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 scrolling table view loses delete icon for two values

@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)
    }
}
...