在audioPlayerDidFinishPlaying之后隐藏CollectionViewCell中的按钮

时间:2018-04-05 12:45:12

标签: swift button uicollectionview uicollectionviewcell

我在ViewController中有一个CollectionView。 此collectionView中的每个collectionViewCell都有一个按钮。按下按钮后,音频开始播放。 我想做的是在音频播放结束后隐藏按钮。

如何在audioPlayerDidFinishPlaying委托方法中访问collectionViewCell中按钮的isHidden属性?

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, AVAudioPlayerDelegate {


func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    print("Did finish playing audio.")
}

2 个答案:

答案 0 :(得分:0)

您需要知道要隐藏按钮的单元格的indexPath。然后在audioPlayerDidFinishPlaying方法内部执行以下操作:

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    if let cell = collectionView.cellForItem(at: savedIndexPath) as? YourCustomCellClass {
        cell.button.isHidden = true
    }
}

或者如果您不想要可选的if let cell,您可以强行打开包装:

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {    
    let cell = collectionView.cellForItem(at: savedIndexPath) as! YourCustomCellClass
    cell.button.isHidden = true
}

请注意,savedIndexPath是要隐藏按钮的单元格的indexPath,YourCustomCellClass是您正在使用的UICollectionViewCell的子类。

答案 1 :(得分:0)

考虑到您的音频文件网址是唯一的,您可以获取player.url然后找到此网址的索引,然后您就可以获得indexPath。

例如

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {

        print(player.url ?? "play")

        if let playerFileName = player.url?.lastPathComponent, let index = urls.index(of: playerFileName), let cell = collectionView.cellForItem(at: IndexPath(row: index, section: 0)) as? AudioCollectionViewCell {

            cell.playButton.isHidden = true
        }

    }

如果不是这种情况,那么将当前的plaing index保存在某处,然后你可以在该索引处找到单元格并隐藏/取消隐藏按钮。