快速处理基于JSON值的收藏夹和收藏夹按钮

时间:2018-08-08 09:24:07

标签: ios json swift uicollectionview

我正在尝试将最喜欢和最喜欢的功能实现到我的单元中。在这里,最初,我在集合视图中显示单元格按钮图标favorite (gray),它是最不喜欢的,但是单击该按钮后,它将显示绿色,这是它的最喜欢的。从JSON中,我得到的响应是哪些单元格已被收藏,而其他单元格则不受欢迎。它可以正常工作,但是当我单击JSON最喜欢的启用绿色按钮时,它不会通过单击更改为灰色,它可以正常工作,但双击时却调用了JSON,因此3rd单击再次添加收藏夹。

在这里,在我的代码下方-

var checked = false

 @IBAction func favoritesTapped(_ sender: Any) {

            if checked {
                favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
                checked = false
                delegate?.unfavoriteButtonPressed(cell: self)

            } else {
                favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
                checked = true
                delegate?.favoriteButtonPressed(cell: self)
            }
}

上面的代码我用于按钮单击以更改图像,并且最初我还固定了灰色checked = false

进入项目中的收藏夹视图单元格

 if indexPath.row < cfavoritesIDData.count {

            if let i = cfavoritesIDData[indexPath.item] {
                cell.favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
            }
            else {
                print("id is nil")
                cell.favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
            }
}

问题:如果我点击启用了JSON的绿色按钮(收藏夹),则其调用效果不佳,但是3秒钟后按钮图标没有变为绿色,仅单击其变化的灰色即可。

2 个答案:

答案 0 :(得分:0)

您需要将单元格模型存储在View Controller中,该单元格不应包含checked布尔值,当您在cellForRow:中配置单元格时,请在此告诉它是否选中。

按下按钮时,您应该有一个delegate回调或closure来告诉View ControllerIndexPath'x'处的单元格按下了它喜欢的按钮并检查是否检查反应的模型,然后重新配置单元。

答案 1 :(得分:0)

您可以使用UIButton的selected属性代替选中的变量:

if indexPath.row < favoritesIDData.count {

    if let i = cfavoritesIDData[indexPath.item] {
        cell.favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
        cell.favbutton.setSelected = true
    }
    else {
        print("id is nil")
        cell.favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
        cell.favbutton.setSelected = false
    }
}




@IBAction func favoritesTapped(_ UIButton: favButton) {

    if favButton.isSelected {
        favbutton.setImage(UIImage(named: "item_grayfav.png"), for: .normal)
        checked = false
        delegate?.unfavoriteButtonPressed(cell: self)

    } else {
        favbutton.setImage(UIImage(named: "item_greenfav.png"), for: .normal)
        checked = true
        delegate?.favoriteButtonPressed(cell: self)
    }
}

注意:请勿按照正确的语法复制粘贴更改。