我在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.")
}
答案 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保存在某处,然后你可以在该索引处找到单元格并隐藏/取消隐藏按钮。