2017-09-01 1 views
0

Je fais un lecteur de musique en utilisant collectionView. Je veux quand sélectionné collectionVoir comme bouton radio. Si une autre cellule est sélectionnée, la cellule sélectionnée ne doit pas être sélectionnée. mais ne fonctionne pas.CollectionView issue - Swift

I dont want multi selection.: https://i.stack.imgur.com/ATj3J.png

Comment puis-je travailler? TT J'ai besoin de ton aide. THX.

ce mon code.

 import UIKit 

class PracticeViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 


var homeClassInPrac = HomeViewController() 
var songPlayOff = UIImage(named: "play") 
var songPlayOn = UIImage(named: "iconStop") 
var buttonCounter = [Int]() 
var freqNameList = ["Delta 1","Theta 1","Alpha 1","Beta 1","Delta 2","Theta 2","Alpha 2","Beta 2","Delta 3","Theta 3","Alpha 3","Beta 3","Delta 4","Theta 4","Alpha 4","Beta 4"] 


@IBOutlet var practiceCollection: UICollectionView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    practiceCollection.delegate = self 
    practiceCollection.dataSource = self 
    self.practiceCollection.allowsMultipleSelection = false 

} 

func numberOfSections(in collectionView: UICollectionView) -> Int { 

    return 1 

} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    self.practiceCollection.reloadData() 
    return freqNameList.count 

} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell:PracticeCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "pracCell", for: indexPath) as! PracticeCollectionViewCell 

    cell.pracImgView.image = songPlayOff 
    cell.pracLabel.text = freqNameList[indexPath.row] 
    if buttonCounter.contains(indexPath.row){ 
     cell.pracImgView.image = songPlayOn 
    } 
    else{ 
     cell.pracImgView.image = songPlayOff 
    } 
    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 


     if buttonCounter.contains(indexPath.row){ 
      let index = buttonCounter.index(of: indexPath.row) 
      buttonCounter.remove(at: index!) 
      self.practiceCollection.reloadData() 
      homeClassInPrac.audioPlayer2.stop() 
     } 
     else{ 
      buttonCounter.removeAll() 
      buttonCounter.append(indexPath.row) 
      self.practiceCollection.reloadData() 
      let buttonInt = buttonCounter[0] 
      homeClassInPrac.playSound2(freqName: freqNameList[buttonInt]) 
    } 
print("Select\(buttonCounter)") 
} 

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
     print("Deselect\(buttonCounter)") 
     let index = buttonCounter.index(of: indexPath.row) 
     buttonCounter.remove(at: index!) 
     self.practiceCollection.reloadData() 
     print("Deselect\(buttonCounter)") 

} 





override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
+0

Avez-vous essayé d'installer self.collectionView.allowsMultipleSelection = false dans votre code? – 3stud1ant3

+0

oui. J'ai déjà. self.collectionView.allowsMultipleSelection = false dans viewDidLoad. –

+0

ajouter cette fonction dans votre override code func CollectionView (_ CollectionView: UICollectionView, didDeselectItemAt indexPath: indexPath) { print ("Désélectionnez") } et vérifier si elle est appelée lorsque vous sélectionnez un autre élément? – 3stud1ant3

Répondre

0

Je pense que problème est que vous rechargez CollectionView dans numberOfItems méthode

donc suffit de retirer

self.practiceCollection.reloadData() 
0

Changement buttonCounter à tableau de BOOLÉENS avec un nombre égal à freqNameList

var buttonCounter : Array<Bool> = [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false] 

Dans la méthode cellForItem, utilisez:

if buttonCounter[indexPath.row]{ 
     cell.pracImgView.image = songPlayOn 
    } 
    else{ 
     cell.pracImgView.image = songPlayOff 
    } 

En didSelectItem utilisation:

buttonCounter[indexPath.row] = true 
homeClassInPrac.playSound2(freqName: freqNameList[buttonInt]) 
self.practiceCollection.reloadData() 

En utilisation didDeselectItem:

buttonCounter[indexPath.row] = false 
self.practiceCollection.reloadData()