播放在iOS中的表格视图中显示的歌曲

时间:2016-03-08 17:53:03

标签: ios swift uitableview mpmediaitem

我在表格视图中显示了iTunes音乐库的所有歌曲。现在,我想在用户点击它时立即在表格视图中播放所选歌曲。

这是我的代码:

import UIKit
import MediaPlayer

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet var table: UITableView!

    //Create an array with some elements for the table view rows
    var myMusicPlayer = MPMusicPlayerController()
    var allSongsArray: [MPMediaItem]!
    let songsQuery = MPMediaQuery.songsQuery()
    var abcArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "#"]

    //Define the amount of sections in table view
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return abcArray.count
    }

    //Assign the amount of elements in the array to the amount of rows in one section
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return allSongsArray.count
    }

    //Set up each element in abcArray as title for section
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return self.abcArray[section] as String
    }

    //Set up the Index Search
    func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
        return abcArray
    }

    //Assign each element in the array a row in table view
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCellWithIdentifier("cell")
        var items = allSongsArray[indexPath.row]

        cell?.textLabel?.text = items.title
        cell?.detailTextLabel?.text = items.artist
        var imageSize = CGSizeMake(100, 100)
        cell?.imageView?.image = items.artwork?.imageWithSize(imageSize)

        return cell!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.allSongsArray = songsQuery.items! as [MPMediaItem]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

1 个答案:

答案 0 :(得分:0)

使用此参考

import UIKit
import AVFoundation



class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var player:AVAudioPlayer?

    var audio = ["song1","song2","song3","song4"]
    override func viewDidLoad() {
        super.viewDidLoad()
        let table:UITableView = UITableView()
        let frame = bounds()
        table.frame = CGRectMake(0.0, 64.0, frame.size.width, frame.size.height - 64.0)
        table.delegate = self
        table.dataSource = self
        table.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view .addSubview(table)

        // Do any additional setup after loading the view, typically from a nib.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return audio.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
        cell.textLabel?.text = self.audio[indexPath.row]
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

//        let details = PlayerViewController(nibName:"PlayerViewController",bundle: nil)
//        details.song = self.audio[indexPath.row] as String?
//        self.navigationController!.pushViewController(details, animated: true)

        player = setupAudioPlayerWithFile(audio[indexPath.row], type: "mp3")
        player?.play()

    }


    func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {
        //1
        let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
        let url = NSURL.fileURLWithPath(path!)

        //2
        var audioPlayer:AVAudioPlayer?

        // 3
        do {
            try audioPlayer = AVAudioPlayer(contentsOfURL: url)
        } catch {
            print("Player not available")
        }

        return audioPlayer
    }




    func bounds() -> CGRect
    {
      return UIScreen.mainScreen().bounds
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}