我在MainStoryBoard上有三个UIButtons和三个UI UIlabels(在按钮上方)。 UIButton通过IBOutlet与每个音频文件连接。
我想对此提出更多类似的看法。 (只需对音频文件,文本标签,按钮大小和数字进行微小更改)。
我发现有多种方法可以实现这一点。一种是以编程方式实例化新的视图控制器,另一种是以编程方式创建视图控制器和元素。
每项措施的优缺点是什么?
class ViewController: UIViewController, AVAudioPlayerDelegate {
let url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3")
let url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3")
let url3 = Bundle.main.bundleURL.appendingPathComponent("music3.mp3")
@IBOutlet weak var yourButton1: customButton!
@IBOutlet weak var yourButton2: customButton!
@IBOutlet weak var yourButton3: customButton!
func player(url: URL) {
do {
try player = AVAudioPlayer(contentsOf:url)
player.play()
} catch {
print(error)
}
}
@IBAction func pushButton1(sender: UIButton) {
player(url: url1)
}
@IBAction func pushButton2(sender: UIButton) {
player(url: url2)
}
@IBAction func pushButton3(sender: UIButton) {
player(url: url3)
player.play()
}
答案 0 :(得分:0)
为什么不使用单个viewcontroller,其方法可以让您使用所需的值适当填充某些字段?将您的网址设为班级中的var字段。类似的东西:
class ViewController: UIViewController, AVAudioPlayerDelegate {
var url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3")
var url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3")
var url3 = Bundle.main.bundleURL.appendingPathComponent("music3.mp3")
@IBOutlet weak var yourButton1: customButton!
@IBOutlet weak var yourButton2: customButton!
@IBOutlet weak var yourButton3: customButton!
func refill(song1: String, song2: String, song3: String) {
url1 = Bundle.main.bundleURL.appendingPathComponent(song1)
url2 = Bundle.main.bundleURL.appendingPathComponent(song2)
url3 = Bundle.main.bundleURL.appendingPathComponent(song3)
}
...
}
您也可以相应地更改文本标签。