通过SEGUE数据通过SEGUE数据(Pass data through segue)

2019-05-10 08:53发布

我在做用的tableview控制器的DetailView简单的iOS应用。 我想要的是通过SEGUE来传递数据。

这是它的外观。

所有我想要的,就是你点击“Markíza”它会打开URL视频编号为1,如果u点击“电视JOJ”它会在播放器中打开URL视频号码2。

我的tableview细胞:

    struct Program {
        let category : String
        let name : String
    }


   var programy = [Program]()
        self.programy = [Program(category: "Slovenské", name: "Markíza"),
                         Program(category: "Slovenské", name: "TV JOJ")]

Answer 1:

斯威夫特的作品完全相同的方式与obj-C相同,但在新的语言重写。 我没有很多从您的文章信息,但让我们给一个名称,每个TableViewController来帮助我的解释。

HomeTableViewController(这是截图你有以上)

PlayerTableViewController(这是您要前往的播放器屏幕)

随着中说,在PlayerTableViewController你需要有将存储传递的数据的变量。 只要在你的类声明有这样的事情(如果你打算存储结构作为一个单一的对象,而不是数组:

class PlayerTableViewController: UITableViewController {

    var programVar : Program?

    //the rest of the class methods....

之后,有两种方法可以将数据发送到新TableViewController。

1)使用prepareForSegue

在HomeTableViewController的底部,你将使用prepareForSegue方法来传递数据。 这里是你将使用代码示例:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    // Create a variable that you want to send
    var newProgramVar = Program(category: "Some", name: "Text")

    // Create a new variable to store the instance of PlayerTableViewController 
    let destinationVC = segue.destinationViewController as PlayerTableViewController
    destinationVC.programVar = newProgramVar
    }
}

一旦PlayerTableViewController已加载的变量将已经设置和使用

2)使用didSelectRowAtIndexPath方法

如果需要具体的数据基于哪个小区发送的选择,你可以使用didSelectRowAtIndexPath方法。 对于这个工作,你需要给你的赛格瑞一个名字在故事板视图(让我知道如果你需要知道如何做到这一点太)。

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

    // Create a variable that you want to send based on the destination view controller 
    // You can get a reference to the data by using indexPath shown below
    let selectedProgram = programy[indexPath.row]

    // Create an instance of PlayerTableViewController and pass the variable
    let destinationVC = PlayerTableViewController()
    destinationVC.programVar = selectedProgram

    // Let's assume that the segue name is called playerSegue
    // This will perform the segue and pre-load the variable for you to use
    destinationVC.performSegueWithIdentifier("playerSegue", sender: self)
}

让我知道如果你需要在这个任何其他信息



Answer 2:

与SWIFT 3&4

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "MainToTimer") {
        let vc = segue.destination as! YourViewController
        vc.var_name = "Your Data"
    }
}


Answer 3:

如果您有没有必要辨别由标识符,但只能由目标类的行动...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? YourViewController {
        vc.var_name = "Your Data"
    }
}


文章来源: Pass data through segue