像按钮一样快速的火力

弗拉德78

在tableViewCell 中,我有likeButton 和unlikeButton。我想要的是当我按下 likeButton 时 - 将数据从单元格保存到 firebase,当我不同时 - 删除

但我有两个问题:

1-- 当我单击 likeButton 时cell == indexPath.row 0 or 1,例如在最后一个或上一个单元格上单击 likeButton

2--当我点击不一样的按钮时,我想删除-但这不起作用

在单元格中我有:

var index: Int?
var cat = ""
var quoteNAme = ""
var quoteNum = ""

  @IBAction func likePressed(_ sender: UIButton) {
         sender.tag = index!
        saveToUser(whereSave: "userLikes", quant: "quantLikes")

        self.likeBtn.isEnabled = false

        let ref = Database.database().reference().child("Цитаты").child("\(cat)").child("\(quoteNAme)").child("\(quoteNum)")
        let keyToPost = ref.childByAutoId().key!
        let updateLikes: [String : Any] = ["peopleWhoLike/\(keyToPost)" : Auth.auth().currentUser!.uid]
        ref.updateChildValues(updateLikes, withCompletionBlock: { (error, reff) in
            if error == nil {
                ref.observeSingleEvent(of: .value, with: { (snap) in
                    if let properties = snap.value as? [String : AnyObject] {
                        if let likes = properties["peopleWhoLike"] as? [String : AnyObject] {
                            let count = likes.count
                            self.likeLabel.text = "\(count)"
                            let update = ["quant" : count]
                            ref.updateChildValues(update)
                            self.likeBtn.isHidden = true
                            self.unlikeBtn.isHidden = false
                            self.likeBtn.isEnabled = true
                        }
                    }
                })
            }
        })
          ref.removeAllObservers()
        }
    }

@IBAction func unlikePressed(_ sender: UIButton) {
        self.unlikeBtn.isEnabled = false
        deleFromUser(whereSave: "userLikes", quant: "quantLikes")

        let ref = Database.database().reference().child("Цитаты").child("\(cat)").child("\(quoteNAme)").child("\(quoteNum)")

        ref.observeSingleEvent(of: .value, with: { (snapshot) in
            if let properties = snapshot.value as? [String : AnyObject] {
                if let peopleWhoLike = properties["peopleWhoLike"] as? [String : AnyObject] {
                    for (id,person) in peopleWhoLike {
                        if person as? String == Auth.auth().currentUser!.uid {
                            ref.child("peopleWhoLike").child(id).removeValue(completionBlock: { (error, reff) in
                                if error == nil {
                                    ref.observeSingleEvent(of: .value, with: { (snap) in
                                        if let prop = snap.value as? [String : AnyObject] {
                                            if let likes = prop["peopleWhoLike"] as? [String : AnyObject] {
                                                let count = likes.count
                                                self.likeLabel.text = "\(count)"
                                                ref.updateChildValues(["quant" : count])
                                            }else {
                                                self.likeLabel.text = "0"
                                                ref.updateChildValues(["quant" : 0])
                                            }
                                        }
                                    })
                                }
                            })

                            self.likeBtn.isHidden = false
                            self.unlikeBtn.isHidden = true
                            self.unlikeBtn.isEnabled = true
                            break

                        }
                    }
                }
            }

        })
        ref.removeAllObservers()
    }

保存和remome功能

func saveToUser(whereSave:String, quant: String) {
        let userUID = Auth.auth().currentUser!.uid
        let ref = Database.database().reference().child("users").child("\(userUID)")

        let keyToPost = ref.childByAutoId().key!
        let mark = "Цитаты/\(cat)/\(quoteNAme)/\(quoteNum)"
        let updateuser: [String : Any] = ["\(whereSave)/\(keyToPost)" : mark]
        ref.updateChildValues(updateuser, withCompletionBlock: { (error, reff) in
            if error == nil {
                ref.observeSingleEvent(of: .value, with: { (snap) in
                    if let properties = snap.value as? [String : AnyObject] {
                        if let likes = properties["\(whereSave)"] as? [String : AnyObject] {
                            let count = likes.count
                            let update = ["\(quant)" : count]
                            ref.updateChildValues(update)
                        }
                    }
                })
            }
        })
        ref.removeAllObservers()
    }

    func deleFromUser(whereSave:String, quant: String){
        let userUID = Auth.auth().currentUser!.uid
        let mark = "Цитаты/\(cat)/\(quoteNAme)/\(quoteNum)"
        let ref = Database.database().reference().child("users").child("\(userUID)")

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

            if let properties = snapshot.value as? [String : AnyObject] {
                if let peopleWhoLike = properties["\(whereSave)"] as? [String : AnyObject] {
                    print("peopleWhoLike= \(peopleWhoLike)")
                    for (id,person) in peopleWhoLike {
                        if person as! String == mark {
                            ref.child("\(whereSave)").child(id).removeValue(completionBlock: { (error, reff) in
                                if error == nil {
                                    ref.observeSingleEvent(of: .value, with: { (snap) in
                                        if let prop = snap.value as? [String : AnyObject] {
                                            print("prop=\(prop)")
                                            if let likes = prop["\(whereSave)"] as? [String : AnyObject] {
                                                let count = likes.count
                                                ref.updateChildValues(["\(quant)" : count])
                                            }else {
                                                ref.updateChildValues(["\(quant)" : 0])
                                            }
                                        }
                                    })
                                }
                            })
                        }
                    }
                }
            }

        })
        ref.removeAllObservers()
    }

在 ViewController 我有:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryQuoteCell") as! CategoryQuoteCell
    let tett = indexPath.row
    let quant = quantLike[tett]
    cell.quoteNAme = quoteNAme
    cell.quoteNum = quotenumber[indexPath.row]
    cell.cat = cat
    cell.index = indexPath.row
    cell.likeLabel.text = quant.description
    cell.quoteTF.text = quoteList[tett]

    cell.cellDelegate = self

    for person in self.posts[indexPath.row].peopleWhoLike {
        if person == Auth.auth().currentUser!.uid {

            cell.likeBtn.isHidden = true
            cell.unlikeBtn.isHidden = false

            break

        }
    }
    return cell
}

当像 btn 一样按下时 -it' 工作良好并保存

在此处输入图片说明

酒神

我认为您没有正确执行某些操作,当您按下时应该将控制权传递给控制器​​,而不是在 tableViewCell 中执行所有操作。而且您还获得了先前的索引,因为您在触摸单元格之后获得了索引。所以我建议更改一些代码。在你的 tableViewCell 上

var onLikeTap: ((paramsThatYouWantToPass) -> Void)?
var onUnlikeTap: ((paramsThatYouWantToPass) -> Void)?

在您的表格视图单元格中,类似不同的操作:

@IBAction func likePressed(_ sender: UIButton) {
     self.onLikeTap?(params)
}

同为不同

@IBAction func unlikePressed(_ sender: UIButton) {
    self.onUnlikeTap?(params)
}

然后在你的 Table View oncellForRowAt方法上:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryQuoteCell") as! CategoryQuoteCell
    cell.onLikeButton = { [weak self] (params) in 
       // your like function that you used previously
    }
     cell.onUnlikeButton = { [weak self] (params) in 
       // your unlike function that you used previously
    }
    // other cell configuration that you used before
    return cell
}

此外,如果您不想将 params 传递给类似和不同的闭包,您可以不使用 params

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使div像单选按钮一样

来自分类Dev

使用像按钮一样的图像

来自分类Dev

使 tkinter 按钮像 ENTER 一样

来自分类Dev

像iBooks一样快速翻页动画

来自分类Dev

复制像Chrome iOS一样的持久/快速滚动

来自分类Dev

像instagram一样快速的启动画面

来自分类Dev

像int一样快速的int型?C ++

来自分类Dev

使图像按钮像切换按钮一样

来自分类Dev

RStudio还原按钮似乎像Git重置一样

来自分类Dev

像facebook一样的按钮:响应宽度

来自分类Dev

如何像单选按钮一样使mat-checkbox

来自分类Dev

像内联跨度一样环绕的按钮文本

来自分类Dev

像Facebook按钮一样的菜单下拉菜单

来自分类Dev

像facebook一样的按钮:响应宽度

来自分类Dev

像复选框MVC一样的单选按钮

来自分类Dev

像苹果一样的水平滚动按钮

来自分类Dev

像背包一样

来自分类Dev

我如何像熊猫数据框一样快速访问numpy数组

来自分类Dev

为什么我不能像库类一样快速继承多个类

来自分类Dev

快速移动鼠标不会像缓慢移动一样在红色中创建点

来自分类Dev

像UITableViewCell重用标识符一样,如何快速声明类属性?

来自分类Dev

像快速中间件一样使用时已部署的仪表板

来自分类Dev

是否可以像 Windows 10 一样混合启动(快速启动)ubuntu?

来自分类Dev

如何像java一样在C/C++中快速创建链表?

来自分类Dev

如何定义快速路由以在NodeJS中像producthunt一样每天获取数据?

来自分类Dev

如何使按钮组像单选按钮组一样工作?

来自分类Dev

按钮像ios游戏中心按钮一样进行动画处理

来自分类Dev

如何像应用程序栏按钮一样设置按钮样式

来自分类Dev

如何使按钮图像像普通文本按钮一样改变颜色?

Related 相关文章

热门标签

归档