UITableView вставка украшения строки - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь включить редактирование моего UITableView, предоставив кнопку «Редактировать» на навигационной панели.

Цель состоит в том, чтобы позволить пользователю вставлять новые элементы и удалять существующие. При нажатии кнопки «Редактировать» iOS отображает украшение «Удалить» (удаление работает нормально), но не показывает «Вставить»

Я добавил navigationItem.rightBarButtonItem = editButtonItem к своему UIViewControllers viewDidLoad и добавил следующие методы к своему UITableViewDataSource делегат:

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            // Delete the row from the data source
            AppDelegate.persistenceContext.delete(self.fetchedResultsController.object(at: indexPath))
            AppDelegate.saveContext()
        } else if editingStyle == .insert {
            let current = self.fetchedResultsController.object(at: indexPath)
// do rest of insertion logic
        }
    }

Что я что-то упустил?

Да и из интереса, если это возможно, будет ли новая ячейка вставлена ​​выше или ниже той, над которой действиебыл инициирован?

Для записи я могу добавить пользовательские действия смахивания к ячейкам, но отзывы пользователей - они предпочитают кнопку редактирования.

Любой источник света будет оценен по достоинству, все, что Googling получил от меня, - это использование кнопки для вставки новой строки или добавление пользовательских действий смахивания.

1 Ответ

1 голос
/ 10 ноября 2019

Вам необходимо реализовать метод делегата:

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle

Возврат .delete, .insert или .none для заданного пути индекса. Обычно только одна строка (обычно первая или последняя) вернет .insert, а остальные вернут .delete. Возврат .none для любой строки, которая не может быть вставлена ​​или удалена.

Нередко вам нужно переопределить метод setEditing(_ editing: Bool, animated: Bool), чтобы добавить / удалить дополнительную строку только для того, чтобы показатьзеленый значок + (.insert).

Альтернативой является отображение значка + на панели навигации вместо строки со значком вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...