更改tableView中单元格的editingStyle背景颜色和标签

时间:2018-01-29 09:10:23

标签: swift tableview cell swift4

我有一个tableview,我正在尝试实施一个刷卡到删除操作。

我正在使用swift 4和Xcode 9。

到目前为止,我有下一个代码,允许我在滑动时显示删除标签:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    switch editingStyle {
    case .delete:
        print("deleting row")

    default:
        return
    }
}

到目前为止一直很好,现在我想将背景红色改为另一个,如果它也可能我想显示一个图标而不是标签。

我正在尝试使用我在Swift 4中看到过的代码,但在创建按钮时它会抱怨:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteButton = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in
        self.tableView.dataSource?.tableView!(self.tableView, commit: .delete, forRowAt: indexPath)
        return
    }
    deleteButton.backgroundColor = UIColor.black
    return [deleteButton]
}

它给出了这个错误 - >对成员'tableView(_:numberOfRowsInSection:)'

的模糊引用

我不知道我是否正在尝试编辑的好方法,或者它是否在swift 4上完全不可编辑。

感谢任何帮助,

谢谢!

3 个答案:

答案 0 :(得分:3)

我正在使用Xcode 9.2和swift 4.使用相同的代码,但没有错误。完整代码在这里。这对你有帮助。

    import UIKit

    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView = UITableView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height), style: .plain)

        tableView.dataSource = self
        tableView.delegate = self

        self.view.addSubview(tableView)
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
        cell.textLabel?.text = "Lalala"
        return cell
    }

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

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        switch editingStyle {
        case .delete:
            print("deleting row")

        default:
            return
        }
    }

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let deleteButton = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in
            self.tableView.dataSource?.tableView!(self.tableView, commit: .delete, forRowAt: indexPath)
            return
        }
        deleteButton.backgroundColor = UIColor.black
        return [deleteButton]
    }
}

答案 1 :(得分:1)

我是这样尝试的,可能这会对你有所帮助。

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

            let deleteAction = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in

                print("Did tap the button")
                self.deleteSession(sessionId: self.tableModel[indexPath.row].Id)
                print("the session id is '\(self.tableModel[indexPath.row].Id)'")
                self.tableModel.remove(at: indexPath.row)
                print("\(indexPath.row)")
                tableView.deleteRows(at: [indexPath], with: .fade)
                print("\([indexPath])")
        self.medilogTableView.reloadData()

            }
    deleteAction.backgroundColor = UIColor.red
            //deleteAction.backgroundColor = UIColor(patternImage: UIImage(named: "delete_button")!)
            //renameAction.backgroundColor = UIColor(red: 0.298, green: 0.851, blue: 0.3922, alpha: 1.0)
            return [deleteAction]
        }

        medilogTableView is name of the table

答案 2 :(得分:1)

您必须在" in"中实现您的编辑代码。回调:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteButton = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in
        // here implement your delete code
    }

    deleteButton.backgroundColor = .blue
    return [deleteButton]
}

您的"删除代码"的实施示例:

self.tableView.beginUpdates()
self.data.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .left)
self.tableView.endUpdates()