2016-12-07 4 views
0

У меня есть UICollectionView с UIButton как флажок и метка для имени и фамилии. UIButton находится внутри UICollectionViewCell. Моя проблема следующая:UICollectionViewCell с UIButton checkbox - один флажок, выбранный в момент времени

Мне нужен один флажок, выбранный во время, если следующий был нажат, предыдущий должен быть отменен. Я попытался выяснить индекс UIButton indexPath, к сожалению, не повезло. Я буду признателен за помощь.

Вот CheckBox класс:

let checkedImage = UIImage(named: "1x_checked")! as UIImage 
let uncheckedImage = UIImage(named: "1x_unchecked")! as UIImage 

// Bool property 
var isChecked: Bool = false { 
    didSet{ 
     if isChecked == true { 
      self.setImage(checkedImage, for: .normal) 
     } else { 
      self.setImage(uncheckedImage, for: .normal) 
     } 
    } 
override func awakeFromNib() { 
    self.addTarget(self, action: #selector(buttonClicked(sender:)), for: .touchUpInside) 
    self.isChecked = false 
} 
func buttonClicked(sender: UIButton) { 
    if sender == self { 
     isChecked = !isChecked 


ViewController: 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection  section: Int) -> Int { 
    return listOfPartys.count 
} 



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell: izborStrankeCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! izborStrankeCollectionViewCell 
    cell.label.text = listOfPartys[indexPath.row] 


return cell 
+1

проверки этого https://stackoverflow.com/questions/37731206/how-do-select-a-row-from-each-section -of-the-tableview-in-swift/37735007 # 37735007 Возможно, вы можете найти здесь что-то полезное –

ответ

0

Есть много способов, вы можете подойти к этому, но один из способов было бы сохранить переменную в контроллере представления с вашим партийным списком, который хранит, который был выбран indexPath пользователем.

Так скажем, у вас есть собственность, как это:

var selectedIndex: IndexPath? 

Тогда в cellForItem: вы просто проверить, чтобы увидеть, если текущий indexPath равно SelectedIndex и если да, то отметьте поле, как проверяется.

В любое время, когда пользователь проверяет флажок, просто обновите выбранный индекс до нового индекса и вызовите reloadData() в виде коллекции.

+0

Благодарим вас за ответ, но я не могу понять, как назначить indexPath для UIButton, который находится внутри коллекцииViewCell. Если вы можете написать такой подход, я буду благодарен. – Nokijca

+0

, если у вас есть только одна секция таблицы, вы можете установить тег каждой кнопки в свой подсчет строк при создании ячейки. Кроме того, вы можете определить, какая ячейка принадлежит кнопке, используя метод здесь: http://stackoverflow.com/questions/1802707/detecting-which-uibutton-was-pressed-in-a-uitableview – BJHStudios