我在做用的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")]
斯威夫特的作品完全相同的方式与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)
}
让我知道如果你需要在这个任何其他信息
与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"
}
}
如果您有没有必要辨别由标识符,但只能由目标类的行动...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? YourViewController {
vc.var_name = "Your Data"
}
}