简体   繁体   English

CollectionView问题-Swift

[英]CollectionView issue - Swift

I make music player using collectionView. 我使用collectionView制作音乐播放器。 I want to when selected collectionView like radio button. 我想在选择collectionView时选择单选按钮。 If another cell is selected, the selected cell should not be selected. 如果选择了另一个单元格,则不应选择所选的单元格。 but is not working. 但不起作用。

I dont want multi selection. 我不想多选。 : https://i.stack.imgur.com/ATj3J.png https : //i.stack.imgur.com/ATj3J.png

How do I work? 我该如何工作? TT I need your help. TT我需要你的帮助。 thx. 谢谢。

this my 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()
}

I think problem is you are reloading collectionView in numberOfItems method 我认为问题是您要在numberOfItems方法中重新加载collectionView

so Just remove 所以只要移除

 self.practiceCollection.reloadData()

Change buttonCounter to Array of Bool with equal count to freqNameList 将buttonCounter更改为Bool数组,计数等于freqNameList

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

In cellForItem method use : 在cellForItem方法中,使用:

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

In didSelectItem use : 在didSelectItem中使用:

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

In didDeselectItem use : 在didDeselectItem中使用:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM