Swift: использование кнопки панели инструментов для удаления нескольких ячеек в табличном представлении - PullRequest
0 голосов
/ 27 июня 2019

В настоящее время я работаю над приложением todo, используя основные данные.Пользователь может пометить задачи как выполненные.Теперь я хочу добавить кнопку на панель инструментов, которая предполагает удаление всех отмеченных задач на одной вкладке.Я уже настроил действия смахивания, чтобы удалить и пометить ячейку одновременно.Я не могу предоставить какой-либо код для этой ситуации просто потому, что у меня нет конкретной идеи, как это реализовать.Код, представленный ниже, показывает, как я настроил удаление.Может быть, это поможет найти решение.

override func tableView(_ tableView: UITableView,
               trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{

    let deleteAction = UIContextualAction(style: .destructive, title:  "Delete", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in

        //Haptic Feedback
        AudioServicesPlaySystemSound(1519)

        //Animation
        let range = NSMakeRange(0, self.tableView.numberOfSections)
        let sections = NSIndexSet(indexesIn: range)
        self.tableView.reloadSections(sections as IndexSet, with: .fade)

        //Call delete function from CoreDataManager.swift
        let todo = CoreDataManager.shared.getTodoItem(index: indexPath.row)
        CoreDataManager.shared.deleteItems(item2: todo)
        tableView.reloadData()
        success(true)
    })
    deleteAction.image = UIImage(named: "trash1")
    deleteAction.backgroundColor = .red

    return UISwipeActionsConfiguration(actions: [deleteAction])
}

1 Ответ

0 голосов
/ 27 июня 2019

Вы должны получить все задачи из основных данных, проверив completed = true, итерируя каждый todo и вызывая CoreDataManager.shared.deleteItems(item2: todo)

guard let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext else {
    return
}

do {
    let fetchRequest : NSFetchRequest<Todo> = Todo.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "completed == 1")
    let fetchedResults = try context.fetch(fetchRequest) as? [NSManagedObject]
    fetchedResults.forEach { context.delete($0) }
    try context.save()
}
catch {
    print("Error with request: \(error)")
}
...