我有一个自定义单元格类的集合视图。
在每个单元格中,我都有一个具有特定声音的玩家。
当制作一个Button并使用IBOutlet链接到我的代码时,即使我在所有视图中都有userInteractionEnabled = YES
这个事实,它也不会触发。
所以我决定在集合视图控制器中播放声音。 在我的手机中,玩家有一个属性
@property (strong, nonatomic) AVAudioPlayer *voicePlayer;
然后在我的收藏中:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
LHFriendVoiceCollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"LHFriendVoiceCollectionViewCell" forIndexPath:indexPath];
LHFriendVoiceObject *currentFriendVoice = [[LHFriendVoiceObject alloc] initWithNSDictionnary:[self.friendsArray objectAtIndex:indexPath.row]];
[cell hydrateWithFriendVoiceObject:currentFriendVoice];
[cell.voicePlayer prepareToPlay];
//[self.voicesArray addObject:cell.voicePlayer]; tried to stock them in array but doesn't work
return cell;
}
如果我用这种方法播放声音它可以正常工作,但我希望在选择单元格时播放声音。
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath: (NSIndexPath *)indexPath {
LHFriendVoiceCollectionViewCell *cell =
[self.collectionView dequeueReusableCellWithReuseIdentifier:@"LHFriendVoiceCollectionViewCell" forIndexPath:indexPath];
[cell.voicePlayer play];
}
这里声音没有播放,因为voicePlayer是零。 我如何能保住我的球员?
答案 0 :(得分:0)
这段代码就是问题:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath: (NSIndexPath *)indexPath {
LHFriendVoiceCollectionViewCell *cell =
[self.collectionView dequeueReusableCellWithReuseIdentifier:@"LHFriendVoiceCollectionViewCell" forIndexPath:indexPath];
[cell.voicePlayer play];
}
第一行错了。您正在呼叫dequeue
。大错!它创造了一个全新的细胞。不要制作这样的新电池!显然,新单元格中不会包含任何AVAudioPlayer。
你已经有一个细胞;它刚被选中。使用indexPath
和cellForItemAtIndexPath:
了解选择了哪个单元格。那是你想谈的那个。
PS你真的应该弄清楚为什么按钮方法不起作用,但此时没什么大不了的。