2

我有播放列表歌曲,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];

我想你明白我的意思。我想做所有音乐按钮的工作,比如 iOS 内置的音乐应用程序,并在我从UITableView.

我正在尝试任何东西,但我没有找到可以解决我的问题的解决方案。

请帮助我这样做。

谢谢。:)

4

1 回答 1

2

假设您的 NSArray 填充了来自 MPMediaItemCollection 的 MPMediaItems,一旦您知道需要配置什么,这实际上相当简单。首先,创建一个 iVar,最好是 NSUInteger 来存储当前播放曲目的索引。这对于按顺序从一条轨道转到另一条轨道是必要的。

其次,很难从您的帖子中看出曲目标题是从集合中的媒体项目中读取的,还是它们只是静态放置在桌子上,但我提供了一个如何读取曲目标题的示例来自数组中的媒体项,并使用 . 将该值设置为单元格文本valueForProperty

最后,didSelectRowAtIndexPath在下面配置以演示将您已经创建的无符号整数设置为所选单元格的值。我创建的两个didSelectRowAtIndexPathIBAction 都修改了该索引的值,然后调用了我创建的 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];
}
于 2013-01-10T14:40:44.660 回答