在收藏夹视图中保持收藏夹按钮状态

时间:2020-03-08 17:18:43

标签: swift state favorites

我在收藏夹视图中有一个“收藏夹”按钮。 选择该按钮时显示一幅图像,再次单击时显示另一幅图像。 我想保持图像状态,即使它转到另一个视图控制器并返回。
下面的代码写在集合视图的cellforitem内部

cell.favBtn.tag = indexPath.row
            let value = UserDefaults.standard.bool(forKey: "isSaved")
            print("value is",value)
              cell.favBtn.isSelected = value
               cell.favBtn.isSelected = false
        cell.favBtn.addTarget(self, action: #selector(favBtnAction), for: .touchUpInside)

favBtnAction函数代码如下:

 @IBAction func favBtnAction(_ sender: UIButton) {

        if objcell.favBtn.isSelected {
                   // set selected

             sender.setImage(image1, for: UIControl.State.normal)
            objcell.favBtn.isSelected = false
                   UserDefaults.standard.set(true, forKey: "isSaved")
                   UserDefaults.standard.synchronize()
               } else {

                   // set deselected
                 sender.setImage(image2, for: UIControl.State.normal)
                  objcell.favBtn.isSelected = true
                   UserDefaults.standard.set(false, forKey: "isSaved")
                   UserDefaults.standard.synchronize()

               }
}

1 个答案:

答案 0 :(得分:0)

  struct Record{
    let id:Int
    //your other data
    var isFavourite:Bool

    mutating func setIsFavourite(isFavourite:Bool){
        self.isFavourite = isFavourite
    }
}

let items:[Record] = [] //Your collection view data list is here

将商品ID分配到cellForItemAt中的“收藏夹”按钮标签

@IBAction func favBtnAction(_ sender: UIButton) {

    if sender.isSelected{//<- this is how you identify the it is selected or deselected.I add dummy logic here
        items[sender.tag].setIsFavourite(isFavourite: true)
    }else{
        items[sender.tag].setIsFavourite(isFavourite: false)
    }
}

现在,您可以使用isFavorite值在 cellForItemAt

上显示不同的图像