SwipeCellKit Размах для удаления не вызывается - PullRequest
0 голосов
/ 30 августа 2018

Привет! Я использую SwipeCellKit и хотел бы сильно ударить .right, чтобы удалить строку по адресу indexPath.row. Я вызвал функцию editActionsForRowAt indexPath и использовал приведенный ниже код, но пользователь все еще не может провести пальцем для удаления.

У меня есть следующие переменные

var allLists:[ShoppingList] = []
var isSwipeRightEnabled = false
var defaultOptions = SwipeTableOptions()

Мой код:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {

    if orientation == .left {
        guard isSwipeRightEnabled else { return nil }
    }

    let delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in

        var list: ShoppingList

        if self.allLists.count > 0 {
            list = self.allLists[indexPath.row]
            self.allLists.remove(at: indexPath.row)
        } else {
            list = self.allLists[indexPath.row]
        }

        list.deleteItemInBackground(shoppingList: list)

        action.fulfill(with: .delete)
        self.tableView.reloadData()

    }
    configure(action: delete, with: .trash)
    return [delete]

}


func configure(action: SwipeAction, with descriptor: ActionDescriptor) {
    action.title = descriptor.title()
    action.image = descriptor.image()
    action.backgroundColor = descriptor.colour
}

func tableView(_ tableView: UITableView, editActionsOptionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeTableOptions {

    var options = SwipeTableOptions()
    options.transitionStyle = defaultOptions.transitionStyle
    options.buttonSpacing = 11
    return options

}

У меня есть вспомогательный файл .swift с именем SwipeTableViewHelpers.swift, который выглядит так:

import Foundation
import UIKit

enum ActionDescriptor {
case save, returnPurchase, trash

func title() -> String? {

    switch self {
    case .save: return "Save"
    case .returnPurchase: return "Return"
    case .trash: return "Delete"

    }
}

var colour: UIColor {
    switch self {
    case .save: return .lightGray
    case .returnPurchase: return .lightGray
    case .trash: return .red
    }
}

func image() -> UIImage? {

    let name: String
    switch self {
    case .save: name = "saveItem"
    case .returnPurchase: name = "ReturnFilled"
    case .trash: name = "Trash"
    }

    return UIImage(named: name)
}
}

func createSelectedBackgroundView() -> UIView {

let view = UIView()
view.backgroundColor = UIColor.lightGray.withAlphaComponent(0.2)
return view
}

и функция, вызываемая для deleteItemInBackground:

func deleteItemInBackground(shoppingList: ShoppingList) {

    let ref = firebase.child(kSHOPPINGLIST).child(FUser.currentId()).child(shoppingList.id)
    ref.removeValue()

}

Когда пользователь проводит по таблице ViewCell, ничего не происходит, может кто-нибудь увидеть причину этого?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Если вы отлаживаете с ios 11, вам нужно реализовать этот метод

@available(iOS 11.0, *) func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?{ 
let deleteAction = UIContextualAction(style: .normal, title:  "Delete", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
     success(true)
 })
 deleteAction.backgroundColor = .red
 return UISwipeActionsConfiguration(actions: [deleteAction])
}

иначе

 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {}

или вы можете использовать метод ниже для удаления

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

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == UITableViewCellEditingStyle.delete) {
  // by deleting you can update tableview
}}
0 голосов
/ 30 августа 2018

Как документировано, вам нужно установить делегата для ячейки:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! SwipeTableViewCell
    cell.delegate = self
    return cell
}
...