如何在swift 3上使用MPMediaPickerController?

问题描述 投票:-1回答:2

我只是想弄明白,当你按下按钮时,你会显示用户的音乐库,然后你可以选择一首歌。我发现这样做的方法是通过MPMediaPickerController,但我一直在努力让它发挥作用。这是我的程序到目前为止的样子:

import MediaPlayer
import UIKit

class ViewController: UIViewController, MPMediaPickerControllerDelegate {
 var mediaPicker: MPMediaPickerController?


override func viewDidLoad() {
     super.viewDidLoad()

}

@IBAction func showSongs(_ sender: Any) {
    displayMediaPicker()
}
func displayMediaPicker() {
    mediaPicker = MPMediaPickerController(mediaTypes: .music)
    if let picker = mediaPicker {
        picker.delegate = self
        picker.allowsPickingMultipleItems = false
        picker.showsCloudItems = false
        picker.prompt = "Please Pick a Song" 
        view.addSubview(picker.view)
        }
}

}

我知道在[self presentViewController:picker animated: true completion:nil]之后应该有一个属性view.addSubview(picker.view),但是当我输入它时我有选项presentingViewControllerpresentedViewContoller,但没有presentViewController

任何帮助将非常感激

ios swift swift3 xcode8 ios10
2个回答
2
投票

功能presentViewController: animated: completion:函数在Swift 3中重命名,所以它现在看起来像这样:

present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)

所以,在你的情况下,你最终得到一个像这样的presentPicker函数(注意最后一行):

func presentPicker() {
    mediaPicker = MPMediaPickerController(mediaTypes: .music)
    if let picker = mediaPicker {
        picker.delegate = self
        picker.allowsPickingMultipleItems = false
        picker.showsCloudItems = false
        picker.prompt = "Please Pick a Song"
        present(picker, animated: false, completion: nil)
    }
}

希望对你有所帮助。


0
投票

Swift 5,Swift 4非常简单的解决方案

//MARK:- add it in your info.plist file
<key>NSAppleMusicUsageDescription</key> 
<string>$(app Name) uses music</string>

//MARK:- Import in your file
import MediaPlayer

//MARK:- Import as your Delegates
MPMediaPickerControllerDelegate


//MARK:- Just call this function 
func openAudio()
{
    let audiopicker = MPMediaPickerController(mediaTypes: .anyAudio)
    audiopicker.prompt = "Audio"
    audiopicker.delegate = self
    audiopicker.allowsPickingMultipleItems = false
    self.present(audiopicker, animated: true, completion: nil)
}
© www.soinside.com 2019 - 2024. All rights reserved.