[英]How to change button's image when tapped using Firebase Realtime Database
我是 Swift 的初學者。 我想在從 Firebase 實時數據庫中檢索按鈕圖像並點擊時更改按鈕的圖像。 我正在使用名為CustomClass
的自定義 class 並且如果數據庫中的 boolean 值為 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,
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.