0

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

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

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

这是我到目前为止从该教程获得的内容:

iPhone 音乐播放器

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

4

1 回答 1

1

UITableView在尝试需要它的应用程序之前,您可能应该考虑使用 a 。

我是凭记忆写的,所以请测试一下并确认一切正常...

确保您的视图控制器实现了表视图委托的方法,并声明一个UITableViewobj 和一个数组,如下所示:

@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's 添加到数组中。例如,如果您想存储多个字符串,您可以创建自己的对象。只要记住修改调用数组项的位置即可。

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

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

于 2013-02-26T14:24:19.197 回答