Не удается заставить действия "Размах сотовой связи" работать

Прошло некоторое время с тех пор, как я выставил себя здесь дураком, так что здесь снова, поскольку я все еще пытаюсь учиться и чувствовать, как будто я преследую свой хвост в этом проекте.

С учетом вышесказанного, в конечном счете, я бы хотел, чтобы SwipeCellKit от Jerkoch работал, но на данный момент в этом нет необходимости, поскольку мне просто нужно выяснить, как добавить больше параметров, кроме действия "удалить" ячейки.

Вот что у меня есть: мой проект

Это то, что я хотел бы: проект Jerkoch

Я теряю свои данные, если я устанавливаю свойство делегата на tableView из

let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! CommentTableViewCell

в

let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! SwipeTableViewCell

Вот мой код CommentViewController:

    import UIKit
    import SwipeCellKit

    class CommentViewController: UIViewController {

    var postId: String!
    var comments = [Comment]()
    var users = [User]()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.tableFooterView = UIView(frame: CGRect.zero)
        tableView.separatorInset = UIEdgeInsets.zero

        tableView.dataSource = self
        tableView.estimatedRowHeight = 100
        tableView.rowHeight = UITableViewAutomaticDimension

        loadComments()
    }

    func loadComments() {
        Api.Post_Comment.REF_POST_COMMENTS.child(self.postId).observe(.childAdded, with: {
            snapshot in
            Api.Comment.observeComments(withPostId: snapshot.key, completion: {
                comment in
                self.fetchUser(uid: comment.uid!, completed: {
                    self.comments.append(comment)
                    self.tableView.reloadData()
                })
            })
        })
    }

    func fetchUser(uid: String, completed:  @escaping () -> Void ) {
        Api.User.observeUser(withId: uid, completion: {
            user in
            self.users.append(user)
            completed()
        })
    }


}

extension CommentViewController: UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return comments.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! CommentTableViewCell// Can't update this to SwipeTableViewCell - Will loose data
        cell.selectedBackgroundView = createSelectedBackgroundView()
        let comment = comments[indexPath.row]
        let user = users[indexPath.row]
        cell.comment = comment
        cell.user = user
        cell.delegate = self
        return cell
    }
}

extension CommentViewController: SwipeTableViewCellDelegate{

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    }

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
        guard orientation == .right else { return nil }

        let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
            // handle action by updating model with deletion
        }
        // customize the action appearance
        deleteAction.image = UIImage(named: "delete")

        let flagAction = SwipeAction(style: .destructive, title: "Flag") { action, indexPath in
            // handle action
        }
        deleteAction.image = UIImage(named: "flag")

        let blockAction = SwipeAction(style: .destructive, title: "Block") { action, indexPath in
            // handle action
        }
        deleteAction.image = UIImage(named: "block")

        return [deleteAction, flagAction, blockAction]
    }        
}

Я даже попробовал что-то вроде следующего:

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    // THIS GIVES THE DEFAULT 'DELETE' ACTION
    print("Commit editingStyle")

}

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    print("editActionsForRowAtIndexPath")

    let blockAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Block", handler: { (action:UITableViewRowAction, IndexPath:IndexPath) in
        //self.isEditing = false
        print("Block action Pressed")
    })

    let flagAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Flag", handler: { (action:UITableViewRowAction, IndexPath:IndexPath) in
        print("Flag action Pressed")
    })

    let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.destructive, title: "Delete", handler: { (action:UITableViewRowAction, IndexPath:IndexPath) in
        print("Delete action Pressed")
    })

    return [blockAction, flagAction, deleteAction]   
}

Независимо от того, что я делаю, я не могу получить больше, чем просто общее действие "Удалить", отображаемое в действии смахивания.

Я даже не думаю, что следующая функция вызывается / ссылается:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

Что я делаю не так, или что мне нужно для CUD, чтобы получить 3 действия салфетки; Удалить, отметить и заблокировать, чтобы Apple была счастлива за мою следующую заявку.

Спасибо всем заранее!

1 ответ

Этот вопрос устарел, но я напишу ответ, который, я думаю, сделал бы свое дело:)

Вы должны использовать UITableViewController, а не UIViewController для вашего представления. SwipeCellKit работает только с TableViewControllers.

Другие вопросы по тегам