• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Firebase swift中的点赞按钮

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:01:30 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试为我的 UITableViewCell 创建一个赞按钮。到目前为止,我设法做的是每次单击按钮时用 +1 更新喜欢的数量。但是,我只希望用户能够按一次按钮,如果同一用户再次单击该按钮,则用户不喜欢该帖子-就像 facebook 喜欢按钮一样。

如果有任何帮助,我将通过 facebook 登录我的应用程序。

我的代码:

@IBAction func likeTapped(sender: AnyObject) {
        //print(pathDB)
        FIRDatabase.database().reference().child("feed-items").child(pathDB).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            // Get user value
            let antalLikes = snapshot.value!["likesForPost"] as! Int
            print(antalLikes)
            let dataPathen = self.pathDB
            print(dataPathen)

                self.updateTotalNoOfPost{
                    print("Updated")
                }

            // ...
        }) { (error) in
            print(error.localizedDescription)
        }
    }

    func updateTotalNoOfPost(completionBlock : (() -> Void)){

        let prntRef = FIRDatabase.database().reference().child("feed-items").child(pathDB).child("likesForPost")

        prntRef.runTransactionBlock({ (resul) -> FIRTransactionResult in
            if let dealResul_Initial = resul.value as? Int{

                resul.value = dealResul_Initial + 1
                //Or HowSoEver you want to update your dealResul.
                return FIRTransactionResult.successWithValue(resul)
            }else{
                return FIRTransactionResult.successWithValue(resul)
            }
            }, andCompletionBlock: {(error,completion,snap) in

                print(error?.localizedDescription)
                print(completion)
                print(snap)
                if !completion {
                    print("Couldn't Update the node")
                }else{
                    completionBlock()
                }
        })
    }

这里有我在 firebase 中的结构: enter image description here

希望你们能帮助我



Best Answer-推荐答案


如果你的 JSON 是这样的:-

{
  feed-items: {
     feedItem1 :{
          feedText : "This is feed1",
          feedLikes : {uid1 : "true",
                       uid2 : "true"
                    }   
           },
       feedItem2 :{
          feedText : "This is feed2",
          feedLikes : {uid13 : "true",
                       uid2 : "true"
                    }   
           },
         feedItem3 :{
          feedText : "This is feed4",
          feedLikes : {uid4 : "true",
                       uid10 : "true"
                    }   
           },
      }
  }

在检索之前,您必须检查用户是否已经喜欢这篇文章,并相应地设置点赞按钮的状态:-

用于存储检索到的字典使用:-

struct feed {

    var feedLikes : NSMutableDictionary!
    var feedText : String!
    var doILikeThisPost : Bool!
    var feedNameI : String!

    init(likes:NSMutableDictionary!, feed : String!, likeTisPost : Bool!, feedNM : String!){

        self.doILikeThisPost = likeTisPost
        self.feedLikes = likes
        self.feedText = feed
        self.feedNameI = feedNM
    }

}

在你的 tableViewController 中:-

import UIKit
import Firebase
class customTableViewController : UIViewController, UITableViewDelegate ,UITableViewDataSource{


var feedD = [feed]()
@IBOutlet wear var customTableView : UITableView!


override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    customTableView.delegate = self
     customTableView.dataSource = self
    retrieveTheData()


}





func retrieveTheData(){

    FIRDatabase.database().reference().child("feed-items").observeSingleEventOfType(.Value, withBlock: {(allFeeds) in

        if let feedDict = allFeeds.value as? [String: AnyObject]{

            for each in feedDict{

                if let feedLikesDict = each.1["feedLikes"] as? NSMutableDictionary{

                    if feedLikesDict[currentUerID] != nil{

                        let temp = feed.init(likes: feedLikesDict, feed: each.1["feedText"] as! String, likeTisPost: true, feedNM : each.0)
                        self.feedD.insert(temp, atIndex: 0)
                        self.customTableView.reloadData()
                    }else{

                        let temp = feed.init(likes: feedLikesDict, feed: each.1["feedText"] as! String, likeTisPost: false, feedNM : each.0)
                        self.feedD.insert(temp, atIndex: 0)
                        self.customTableView.reloadData()
                    }
                }else{

                    let temp = feed.init(likes: nil, feed: each.1["feedText"] as! String, likeTisPost: false, feedNM : each.0)
                    self.feedD.insert(temp, atIndex: 0)
                    self.customTableView.reloadData()

                }

            }
        }

    })
}




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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return feedD.count ?? 0
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.customTableView.dequeueReusableCellWithIdentifier("CELL") as! customCell

    if feedD[indexPath.row].doILikeThisPost == true{

        cell.feedLikeBtn.selected = true
        cell.feedTextPost = feedD[indexPath.row].feedText
        cell.feedName = feedD[indexPath.row].feedNameI
        cell.parentTableViewController = self
        cell.indexPathForRow = indexPath.row
    }else{

        cell.feedLikeBtn.selected = false
        cell.feedTextPost = feedD[indexPath.row].feedText
        cell.feedName = feedD[indexPath.row].feedNameI
        cell.parentTableViewController = self
         cell.indexPathForRow = indexPath.row
    }


    return cell
    }



}

你自定义的TableViewCell:-

class customCell : UITableViewCell{

@IBOutlet weak var feedLikeBtn : UIButton!
var feedTextPost = String()
var feedName = String()
var indexPathForRow : Int!


var parentTableViewController : customTableViewController!

@IBAction func likeBtn(sender:UIButton!){

    if sender.selected == false{

        FIRDatabase.database().reference().child("feed-items").child(feedName).child("feedLikes").updateChildValues([currentUserID : "true"])
        self.parentTableViewController.feedD[self.indexPathForRow].feedLikes.setObject("true", forKey: currentUserID)
        self.parentTableViewController.feedD[self.indexPathForRow].doILikeThisPost = true
        self.parentTableViewController.customTableView.reloadData()


    }else if sender.selected == true{

        FIRDatabase.database().reference().child("feed-items").child(feedName).child("feedLikes").child(currentUserID).removeValue()
        self.parentTableViewController.feedD[self.indexPathForRow].feedLikes.removeObjectForKey(currentUserID)
        self.parentTableViewController.feedD[self.indexPathForRow].doILikeThisPost = false
        self.parentTableViewController.customTableView.reloadData()

        }


    }

}

另见:- https://stackoverflow.com/a/39458044/6297658

关于ios - Firebase swift中的点赞按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489362/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap