在Swift中的两个视图控制器之间传递数据

时间:2015-08-14 14:28:42

标签: swift viewcontroller between

我有2个视图控制器,分别创建。它不是导航控制器或其他。我有两个文件:ViewController.swiftSecondViewController.swift。第二个VC称为 audioList

在第一个VC中,我有一个按钮,点击它我正在使用代码

打开第二个VC
dispatch_sync(dispatch_get_main_queue(), { () -> Void in

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
    self.presentViewController(controller, animated: true, completion: nil)

})

SecondViewController中有一个名为music的数组。我想在代码之前用元素填充它,你可以看到上层代码 - 来自1-st VC。

我已经阅读了thisthat一篇文章,其他人通过创建具有更改数据的函数的协议,尝试了很多与segues,他们的执行和prepareFor-functions - 来阅读没有用。

请填写array in 2-nd VC

中的button-click-action in 1-st VC来帮助我

更新

SecondViewController.swift我有这段代码:

var music: [String] = ["test"]

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return music.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
    cell.textLabel!.text = music[indexPath.row]

    return cell
}

2 个答案:

答案 0 :(得分:3)

在第一个视图控制器上创建并填充数组。 然后在第二个视图控制器上声明一个具有相同结构的数组。然后将其填入segue。

VC1:

    var music : [String] = ["Song1", "song2", "Song3"]

    dispatch_sync(dispatch_get_main_queue(), { () -> Void in

                            let storyboard = UIStoryboard(name: "Main", bundle: nil)
                            let controller = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController

                            controller.music2 = self.music

                            self.presentViewController(controller, animated: true, completion: nil)
                        })

VC2:

    import UIKit

        class audioList: UIViewController {
        var music2 : [String] 

        viewDidLoad()
        {

        }
}

答案 1 :(得分:2)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
controller.music = ["my", "data"]
self.presentViewController(controller, animated: true, completion: nil)