簡體   English   中英

使用 Firebase 實時數據庫點擊時如何更改按鈕的圖像

[英]How to change button's image when tapped using Firebase Realtime Database

我是 Swift 的初學者。 我想在從 Firebase 實時數據庫中檢索按鈕圖像並點擊時更改按鈕的圖像。 我正在使用名為CustomClass的自定義 class 並且如果數據庫中的 boolean 值為 true,則我嘗試設置圖像,如果值為 false,則將其設置為 nil。

我的問題:

  • 從 Firebase 檢索數據后,我無法更改圖像。
  • 我第一次點擊時可以更改它,但第二次我無法更改它。

在 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,

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)
    }

}

謝謝你。

可能是那個參考 - 丟失

嘗試進行一些重構

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

並用 1 個參數將此代碼替換為 function

錢支票/注意支票/祈禱支票

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 會更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM