我在NSArray
中播放了播放列表歌曲,并显示我UITableView
中的歌曲如下图所示。
就我而言,当我从UITableView
中选择一首歌曲时,我想用MPMusicPlayerController's
applicationMusicPlayer
播放该歌曲。
我的意思是当我从UITableView
选择美国白痴时,我想和MPMusicPlayerController's
当我点击“跳过”按钮时,必须播放下一首歌,就像郊区的耶稣一样。
以下是将歌曲加载到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];
我想你明白我的意思。
当我从UITableView
选择歌曲时,我想做所有音乐按钮的工作,如iOS内置音乐应用程序和播放歌曲。
我正在尝试任何,但我没有找到可以解决我的问题的解决方案。
请帮我这样做。
谢谢你。 :)
答案 0 :(得分:2)
假设您的NSArray是使用MPMediaItemCollection中的MPMediaItems填充的,一旦您知道需要配置什么,这实际上非常简单。首先,创建一个iVar,最好是NSUInteger来存储当前播放曲目的索引。这是有必要按顺序从一个轨道转到另一个轨道。
其次,很难从你的帖子中看出,正在从集合中的媒体项目中读取曲目标题,或者它们是否只是静态放在桌面上,但我已经包含了如何阅读的示例数组中媒体项的曲目标题,并使用valueForProperty
将该值设置为单元格文本。
最后,didSelectRowAtIndexPath
在下面配置,以证明您已经创建的无符号整数到所选单元格的值。我创建的didSelectRowAtIndexPath
和两个IBA都修改了这个索引的值,然后调用我创建的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];
}