UICollectionViewCell切换复选框

时间:2018-01-26 13:55:45

标签: ios swift xcode uicollectionview uicollectionviewcell

我有一个UICollectionViewCell,它有一个按钮作为复选框。由于它是一个可重复使用的单元格,假设渲染的单元格数为4.现在,我想将复选框切换为:如果选中一个单元格中的复选框,那么当我尝试勾选另一个可重复使用单元格的复选框时,则检查前一个单元格图像应该自动取消选中,这样我就可以在所有单元格中只勾选一个复选框。

目前,我的代码如下:

class SelectCollectionCell: UICollectionViewCell {

@IBOutlet weak var teamName: UILabel!
@IBOutlet weak var checkButton: UIButton!
var teamSelected: Bool = false

override func awakeFromNib() {
    super.awakeFromNib()
    checkButton.setImage(#imageLiteral(resourceName: "checked"), for: .selected)
}

func configureCell(_ teams: UserTeamModel) {
    self.teamName.text = teams.name
    self.checkButton.tag = teams.id
}

@IBAction func checkButtonHandler(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    if sender.isSelected {
        SelectTeamView.selectedTeamId = self.checkButton.tag
    }
    else {
        SelectTeamView.selectedTeamId = nil
    }
}
}

我怎样才能实现这一目标?请帮忙。

2 个答案:

答案 0 :(得分:0)

您可以使用通知和观察者。这里的文档: - https://developer.apple.com/documentation/foundation/nsnotificationcenter

简而言之:

  1. 当您选中一个复选框时,您会发送通知而不是设置该单元格的观察者
  2. 取消选中某个复选框后,删除该单元格的观察者
  3. 通过这种方式,每次单元格收到通知时,您都可以管理事件并自动取消选择单元格,然后停止监听该单元格的新事件。

答案 1 :(得分:-1)

尝试使用" teamname"在UserDefault中保存数据。作为关键

将此添加到checkButtonHandler以放置Bool

UserDefaults.standard.set(teamSelected, forKey: teamName)

如果您想从其他ViewControllers获取数据

UserDefaults.standard.bool(forKey: teamName)