iOS播放本地音乐列表

时间:2013-02-26 06:16:27

标签: iphone ios xcode avaudioplayer

我很困惑如何在本地播放歌曲列表。我正在尝试构建一个允许用户从列表中选择一首歌的应用程序,然后继续播放他们中断的列表。除非他们选择不同的歌曲,否则它会向前播放该歌曲。

我已阅读并尝试了多个关于如何使用AVFoundation播放音频文件的教程,但它们似乎只能让我能够播放一个声音。

我尝试过MPMusicPlayer,但这不起作用,因为我只想播放应用程序附带的文件,而不是用户的音乐库。

这是我到目前为止的教程:

iPhone Music Player

我对如何在列表中本地播放歌曲感到困惑和困惑。我如何建立这个?

1 个答案:

答案 0 :(得分:1)

在尝试需要此功能的应用程序之前,您应该考虑使用UITableView

我是从内存中写的,所以请测试并确认一切正常...

确保视图控制器实现表视图委托中的方法,并声明UITableView obj和类似的数组:

@interface YourTableViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
  IBOutlet UITableView *theTableView;
  NSMutableArray *theArray;
}

确保在故事板中链接它们。您应该看到上面定义的theTableView

当你加载应用程序时,写下这个(viewDidLoad之类的地方就好了):

theArray = [[NSMutableArray alloc] initWithObjects:@"Item 1", @"Item 2", @"Item 3", nil];

您不需要声明表视图中有多少个部分,所以现在请稍后再忽略它。但是,您应该声明有多少行:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return [theArray count]; // Return a row for each item in the array
}

现在我们需要绘制UITableViewCell。为简单起见,我们将使用默认值,但您可以轻松制作自己的。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // This ref is used to reuse the cell.
  NSString *cellIdentifier = @"ACellIdentifier";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

  if(cell == nil)
  { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
  }

  // Set the cell text to the array object text
  cell.textLabel.text = [theArray objectAtIndex:indexPath.row];

  return cell; 
}

表格显示曲目名称后,您可以使用以下方法:

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  if(indexPath.row == 0)
  {
    NSString *arrayItemString = [theArray objectAtIndex:indexPath.row];
    // Code to play music goes here...
  }
}

在我们在顶部声明的NSMutableArray中,您不必将NSString添加到数组中。例如,如果要存储多个字符串,可以创建自己的对象。只需记住修改调用数组项的位置。

最后,要播放音频,请尝试使用this SO答案中的答案。

此外,虽然没有必要,但您可以使用SQLite数据库来存储您希望在列表中播放的曲目,而不是对列表进行硬编码。然后在调用数据库后填写NSMuatableArray