我在 NSArray
中有播放列表歌曲,并在我的 UITableView
中显示这些歌曲,如下图所示。
就我而言,当我从 UITableView
选择一首歌曲时,我想使用 MPMusicPlayerController's
applicationMusicPlayer
播放该歌曲。
我的意思是,当我从 UITableView
中选择 american idiot 时,我想用 MPMusicPlayerController 的
玩 American idiot
当我点击下面的“跳过”按钮时,它必须播放下一首歌曲,例如郊区的耶稣。
这是我将歌曲加载到 UITableView 的代码
self.player = [MPMusicPlayerController applicationMusicPlayer];
MPMediaQuery *query = [MPMediaQuery playlistsQuery];
MPMediaPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:@"GreenDay" forProperty:MPMediaPlaylistPropertyName comparisonType:MPMediaPredicateComparisonContains];
[query addFilterPredicate:predicate];
self.arrayOfSongs = [query items];
我想你明白我的意思。
我想做所有音乐按钮的工作,就像 iOS 内置的音乐应用程序一样,当我从 UITableView
中选择歌曲时播放歌曲。
我正在尝试任何方法,但我没有找到可以解决我的问题的解决方案。
请帮助我这样做。
谢谢你。 :)
最佳答案
假设您的 NSArray 填充了 MPMediaItemCollection 中的 MPMediaItems,一旦您知道需要配置什么,这实际上相当简单。首先,创建一个iVar,最好是NSUInteger来存储当前播放轨道的索引。这对于按顺序从一个轨道转到另一轨道是必要的。
其次,很难从您的帖子中判断轨道标题是否是从集合中的媒体项目中读取的,或者它们只是静态放置在 table 上,但我提供了一个如何读取的示例数组中媒体项目的轨道标题,并使用 valueForProperty
将该值设置为单元格文本.
最后,didSelectRowAtIndexPath
下面的配置演示了如何将已创建的无符号整数设置为所选单元格的值。两者didSelectRowAtIndexPath
我创建的两个 IBAction 都修改此索引的值,然后调用我创建的 void“stopCurrentTrackAndPlaySelection”,它会停止当前播放的轨道,将 MPMediaItem 类型转换为该索引处的对象,然后再次开始播放。
如果您需要更多说明,请询问:)
旁注:我建议您将媒体选择器选择 (MPMediaItemCollection) 的副本存储在 NSMutableArray 中,而不是直接存储在 NSArray 或 MPMediaItemCollection 中。这将允许您动态添加或删除轨道,而无需停止播放。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [myArrayOfTracks count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[[cell textLabel] setText:[(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyTitle]];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
indexOfCurrentlyPlayingTrack = indexPath.row;
[self stopCurrentTrackAndPlaySelection];
}
- (IBAction)nextTrack:(UIButton *)sender
{
indexOfCurrentlyPlayingTrack ++;
[self stopCurrentTrackAndPlaySelection];
}
- (IBAction)previousTrack:(UIButton *)sender
{
indexOfCurrentlyPlayingTrack --;
[self stopCurrentTrackAndPlaySelection];
}
- (void)stopCurrentTrackAndPlaySelection
{
[myMPMusicPlayerController stop];
[myMPMusicPlayerController setNowPlayingItem:(MPMediaItem *)[myArrayOfTracks objectAtIndex:indexOfCurrentlyPlayingTrack]];
[myMPMusicPlayerController play];
}
关于ios - 在 iOS 中使用 MPMusicPlayerController 播放和跳过播放列表中的下一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14259798/