首页 > 解决方案 > 使用 Firebase 实时数据库点击时如何更改按钮的图像

问题描述

我是 Swift 的初学者。我想在从 Firebase 实时数据库中检索到按钮的图像后以及点击时更改按钮的图像。我正在使用一个名为的自定义类CustomClass,如果数据库中的布尔值为 true,我尝试设置图像,如果值为 false,则将其设置为 nil。

我的问题:

在 cellForRowAt 方法中,

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = InfoTableView.dequeueReusableCell(withIdentifier: "customcell", for: indexPath) as! CustomCell

    let keyword = cell.nameLabel.text
    var reference: DatabaseReference!
    cell.buttonAction = { sender in

        if  (sender as AnyObject).imageView?.image != nil{
            cell.prayButton.setImage(nil, for: .normal)
            reference = Database.database().reference().child("check" ).child(keyword!).child("prayCheck")
                   reference.setValue(false)
        } else{
                    let image = UIImage(named: "check")
            cell.prayButton.setImage(image, for: .normal)
                        reference = Database.database().reference().child("check").child(keyword!).child("prayCheck")
                        reference.setValue(true)
        }

    }
    cell.moneyButtonAction = { sender in


        if  (sender as AnyObject).imageView?.image != nil {
            cell.moneyButton.setImage(nil, for: .normal)
                   reference = Database.database().reference().child("check").child(keyword!).child("moneyCheck")
                   reference.setValue(false)
        } else {
                   let image = UIImage(named: "check")
            cell.moneyButton.setImage(image, for: .normal)
                    reference = Database.database().reference().child("check").child(keyword!).child("moneyCheck")
                   reference.setValue(true)
        }

    }
    cell.atentionButtonAction = { sender in

        if (sender as AnyObject).imageView?.image != nil {
            cell.alartButton.setImage(nil, for: .normal)
                   reference = Database.database().reference().child("check").child(keyword!).child("atentionCheck")
                   reference.setValue(false)
        } else {
                    let image = UIImage(named: "check")
            cell.alartButton.setImage(image, for: .normal)
                    reference = Database.database().reference().child("check").child(keyword!).child("atentionCheck")
                    reference.setValue(true)
               }
    }



    return cell

   }

在自定义类中,

class CustomCell: UITableViewCell {

    @IBOutlet  weak var bookingLabel: UILabel!
    @IBOutlet  weak var nameLabel: UILabel!
    @IBOutlet weak var applyDateLabel: UILabel!


    @IBOutlet weak var nameIcon: UILabel!
    @IBOutlet weak var applyIcon: UILabel!
    @IBOutlet weak var bookinfIcon: UILabel!

    @IBOutlet weak var prayImage: UIImageView!
    @IBOutlet weak var receiveMoneyImage: UIImageView!
    @IBOutlet weak var atentionImage: UIImageView!

    @IBOutlet weak var prayButton: UIButton!
    @IBOutlet weak var moneyButton: UIButton!
    @IBOutlet weak var alartButton: UIButton!

    var pathKey: String!
    var reference: DatabaseReference!
    var buttonAction: ((Any) -> Void)?
    var moneyButtonAction: ((Any) -> Void)?
    var atentionButtonAction:((Any) -> Void)?

    @IBAction func buttonPressed(_ sender: Any){

    self.buttonAction?(sender)

    }

    @IBAction func moneyButtonPressed(_ sender: Any) {
        self.moneyButtonAction?(sender)
    }


    @IBAction func atentionButtonPressed(_ sender: Any) {
        self.atentionButtonAction?(sender)
    }

}

谢谢你。

标签: iosswiftuitableviewfirebase-realtime-database

解决方案


可能是那个参考 - 丢失

尝试进行一些重构

cell.buttonAction = { sender in
     configureAction(type: .moneyCheck)
}

并将此代码替换为具有 1 个参数的函数

钱支票/注意支票/祈祷支票

func configureAction(type: FieldTypeEnum) {
 let isNotNull = (sender as AnyObject).imageView?.image != nil
        reference.setValue(isNotNull)
        reference = Database.database().reference().child("check").child(keyword!).child("prayCheck")
        let image: UIImage? = isNotNil ? UIImage(named: "check") : nil
        cell.prayButton.setImage(image, for: .normal)
}

如果您将放入 Enum 会更好


推荐阅读