制作许多类似的ViewControllers

时间:2017-02-25 10:49:11

标签: ios swift

我在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()
    }

1 个答案:

答案 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)

    }
    ...
}

您也可以相应地更改文本标签。