gpt4 book ai didi

ios - 将索引路径发送到 Firebase(如按钮)

转载 作者:行者123 更新时间:2023-11-28 12:15:18 26 4
gpt4 key购买 nike

我有一个表格 View ,单元格中填充了来自 Firebase 的数据。在每个单元格中都有一个喜欢的按钮,当我喜欢特定单元格中的按钮时,它会捕获该单元格的 ID 并在 Firebase 中创建一个节点,让我知道该按钮已被单击(喜欢)。按钮在点击前是白色的,点击后变成红色。然后,如果再次单击它(不喜欢),它会变成白色。

 @IBAction func LikeClicked(_ sender: UIButton) -> Void {

let LikedRef = FIRDatabase.database().reference().child("Likes").child((self.loggedInUser?.uid)!)

let indexPath = self.selectedIndex
let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]
self.key = post["postID"] as? String

let cell = TableView.cellForRow(at: indexPath!) as! ProfileTableViewCell


if cell.Like.currentImage == #imageLiteral(resourceName: "icons8-Hearts Filled-50 (2)"){
cell.Like.setImage(#imageLiteral(resourceName: "icons8-Heart-50"), for: .normal)
// cell.RedLike.isHidden = true

FIRDatabase.database().reference().child("Likes").child((self.loggedInUser?.uid)!).child(self.key!).removeValue(completionBlock: { (error, ref) in
if error != nil {
print("error \(error)")
}else{

}})
} else{

LikedRef.observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in


if let postsDictionary = snapshot .value as? [String: AnyObject] {


var LikeStatus = postsDictionary[self.key!] as? String ?? ""

if self.key == LikeStatus
{
// cell.Like.isHidden = true

cell.Like.setImage(#imageLiteral(resourceName: "icons8-Hearts Filled-50 (2)"), for: .normal)

}


}})



LikedRef.updateChildValues([self.key!: self.key!])


}


}

cell.Like.addTarget(self, action: #selector(LikeClicked), for: UIControlEvents.touchUpInside)
cell.Like.tag = indexPath.row
print(indexPath.row)
cell.Like.isUserInteractionEnabled = true

我的问题是,当我喜欢特定单元格上的一个按钮时,每个单元格中的所有类似按钮都会变成红色。但我只希望我点击的单元格变为红色,当我离开应用程序并返回时,所有按钮都恢复为白色。我希望登录用户喜欢的任何按钮都保持红色,无论用户是否退出应用程序。

最佳答案

好的,所以我花了一个小时左右的时间来让您了解如何做您需要做的事情。喜欢和不喜欢您的自定义 UITableViewCell。我在每一行代码中都解释了我所做的细节。我希望这可以帮助你。如果您有任何疑问,请告诉我。请记住,这只是您完成任务的众多方式之一。

MyViewController.swift

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, MyCustomCellDelegate {

// This is the array of keys that we
var likedDataKeys = [String]()

override func viewDidLoad() {
super.viewDidLoad()

// Load here the 'Likes' stuff and store its in a datasource for reference or store as well its keys.
// If data is liked, store to likedDayaKeys the key of your data.

FirebaseCall {
if liked {
self.likedDataKeys.append(keyOfYourData)
}
}
}

// MARK: - UITableViewDataSource

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ....

// Set the image.

let dataKey = yourDatasource[indexPath.row] // get the key or whatever data you need

// Set the delegate and key
cell.delegate = self
cell.dataKey = dataKey

if likedDataKeys.contains(dataKey) {
cell.image = redImageLike
} else {
cell.image = whiteNormalLikeImage
}

return cell
}

// MARK: - MyCustomCellDelegate

func myCustomCell(userDidTapLikeWithDataKey dataKey: String) {
// So now we can get the dataKey of the cell that is being liked or unliked.
// Check from the self.likedDataKeys if the tapped cell is liked or not.

if self.likedDataKeys.contains(dataKey) {
// If it is there, then we should call the unlike Firebase.
// Also remove it from the self.likedIndexPath and reload the tableView to update the image.

let index = self.likedDataKeys.index(of: dataKey)
self.likedDataKeys.remove(at: index)

// Call now the unlike Firebase.

} else {
// If it is not there, then we should call the like Firebase.
// Also store it to the self.likedIndexPAth
}
}
}

MyCustomCell.swift

protocol MyCustomCellDelegate: NSObjectProtocol {
// This is the delegate that will help us send the dataKey reference to the viewController
// Whenever the user taps on the like button in the cell.
func myCustomCell(userDidTapLikeWithDataKey dataKey: String)
}

class MyCustomCell: UITableViewCell {

// This will be called in the viewController, pass here the self of the viewController
weak var delegate: MyCustomCellDelegate?

// Make sure to pass here the key from the cellForRow of the viewController's tableView delegate.
var dataKey = ""

@IBAction func LikeClicked(_ sender: UIButton) -> Void {
// Call the delegate to inform the viewController
self.delegate?.myCustomCell(userDidTapLikeWithDataKey: self.dataKey)
}
}

关于ios - 将索引路径发送到 Firebase(如按钮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com