热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Fireview就像tableview单元格中的系统一样-Firebaselikesysteminsidetableviewcell

Icreatedlikesystemintomytableviewcell.Howeverithasproblems.我在tableview单元格中创建了类似系统。但它有问题。

I created like system into my tableview cell. However it has problems.

我在tableview单元格中创建了类似系统。但它有问题。

  1. If I like one thing, every 7th cell is getting like also, why? Is there something with reusableCell?
  2. 如果我喜欢一件事,每个第7个细胞也会变得像,为什么?有可重复使用的内容吗?
  3. What is the best approach doing it, am I doing it totally wrong?
  4. 这样做的最佳方法是什么,我完全错了吗?

This is the like button system:

这就像按钮系统:

cell.likeButton.addTarget(self, action: #selector(self.tapped), for: .touchUpInside)
    func tapped(sender: DOFavoriteButton) {
            if sender.isSelected {
                // deselect
                sender.deselect()//+1 like
            } else {
                // select with animation
                sender.select()//-1 like 
            }
        }

And this is my likeSystem function:

这是我的喜欢系统功能:

func likeSystem(sender: DOFavoriteButton, cellForRowAt indexPath: IndexPath){
        if sender.isSelected {
        let cell = tableView.dequeueReusableCell(withIdentifier: "snusProductsCell", for: indexPath) as! SnusProductTableViewCell
        self.databaseRef.child("Snuses").child(self.products[indexPath.row].snusProductTitle).runTransactionBlock({
            (currentData:FIRMutableData!) -> FIRTransactionResult in
            if var post = currentData.value as? [String : AnyObject], let uid = FIRAuth.auth()?.currentUser?.uid {
                var stars : Dictionary
                stars = post["hasLiked"] as? [String : Bool] ?? [:]
                var starCount = post["likes"] as? Int ?? 0
                if let _ = stars[uid] {
                    // Unstar the post and remove self from stars
                    starCount -= 1
                    stars.removeValue(forKey: uid)

                } else {
                    // Star the post and add self to stars
                    starCount += 1

                    stars[uid] = true
                    sender.deselect()
                }
                post["hasLiked"] = starCount as AnyObject?
                post["likes"] = stars as AnyObject?

                // Set value and report transaction success
                currentData.value = post

                return FIRTransactionResult.success(withValue: currentData)
            }
            return FIRTransactionResult.success(withValue: currentData)
        }) { (error, committed, snapshot) in
            if let error = error {
                print(error.localizedDescription)
            }
        }
        }else{
            sender.select()
        }
    }

My brain is crashing ATM.. Do not know how to continue. Please lead me back to the track.

我的大脑正在崩溃ATM ..不知道如何继续。请带我回到赛道。

This is my Structure:

这是我的结构:

enter image description here

1 个解决方案

#1


2  

This is my functions and work around to handle likes:

这是我的功能,并努力处理喜欢:

class Cell: UITableViewCell {

    var liked = 0
    var likes: [String] = []
    var likeCounter = 0

    func readLikeStatus() {
        if liked == 0 {
            likeButton.setImage(UIImage(named: "unlike"), forState: .Normal)
            likeButton.setTitle("", forState: .Normal)
            likeLabel.text = "\(likeCounter) Likes"

        } else {
            likeButton.setImage(UIImage(named: "like"), forState: .Normal)
            likeButton.setTitle("", forState: .Normal)
            likeLabel.text = "\(likeCounter) Likes"
        }           
    }

    @IBAction func likeButton(sender: AnyObject) {

        if liked == 0 {

            likeTweet()
            liked = 1
            likeCounter = likeCounter + 1
            readLikeStatus()

        } else if liked == 1 {

            unlikeTweet()
            liked = 0
            likeCounter = likeCounter - 1
            readLikeStatus()

        }
    }

    func likeTweet() {
        let userID = [backendless.userService.currentUser.objectId: backendless.userService.currentUser.objectId]
        let usersRef = firebase.child("DeejayTweets").child(passedDJ.objectId).child(tweetID).child("likes")
        usersRef.updateChildValues(userID)
    }

    func unlikeTweet() {
        let userID = backendless.userService.currentUser.objectId
        let usersRef = firebase.child("DeejayTweets").child(passedDJ.objectId).child(tweetID).child("likes")
        usersRef.child(userID).removeValue()
    }

    func bindData(post: Tweet, indexPath: NSIndexPath, commentCount: NSMutableDictionary, avatare: NSMutableDictionary) {
        likeButton.setImage(UIImage(named: "unlike"), forState: .Normal)
        likeButton.setTitle("", forState: .Normal)
        liked = 0

        setLike(post, indexPath: indexPath, commentCount: commentCount, avatare: avatare)
     }

     func setLike(post: Tweet, indexPath: NSIndexPath, commentCount: NSMutableDictionary, avatare: NSMutableDictionary) {

        //SET IF TWEET IS LIKED
        if post.likes.contains(backendless.userService.currentUser.objectId) {
            likeButton.setImage(UIImage(named: "like"), forState: .Normal)
            likeButton.setTitle("", forState: .Normal)
            liked = 1
         }

         //SET LIKE COUNTER


         if post.likes.count == 1 {
            likeLabel.text = "0 Likes"
            likeCounter = 0
         } else if post.likes.count == 1 {
            likeLabel.text = "\(post.likes.count - 1) Like"
            likeCounter = 1
         } else {
            likeLabel.text = "\(post.likes.count - 1) Likes"
            likeCounter = 1
        }
     }

To call everything:

打电话给一切:

class ViewController: UIViewController.... {

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

            let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! Cell
            let post = tweets[indexPath.row]

            cell.bindData(post, indexPath: indexPath, commentCount: commentCount, avatare: avatare)

            return cell
    }

And in my firebase I handle everything like this:

在我的火力基地里,我处理这样的事情:

enter image description here

I'm not saying, that this is the world's best practise, but it is working and might give you the idea of how to handle this.

我不是说,这是世界上最好的做法,但它正在发挥作用,可能会让你知道如何处理这个问题。


推荐阅读
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • html结构 ... [详细]
  • IOS 获取点击的点在屏幕上的坐标,获取某个view在屏幕上的位置
    2019独角兽企业重金招聘Python工程师标准获取点击事件的点相对于屏幕的位置   如果点击事件是如下这个方法(将UIEvent当做参数传回来)-(void)expandB ... [详细]
  • linux clickhouse安装在指定目录_Centos8服务器指定目录安装配置Nginx
    1.安装前准备(1)检查是否安装过nginx(如果没有安装过可以无视)find-namenginx搜索nginx文件及其文件夹rm-rf【nginx配置地址文件及其文件夹】手动删除 ... [详细]
author-avatar
真实的小莹_808
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有