通过继续传递数据

我正在使用 tableview 控制器和 detailView 做一个简单的 iOS 应用程序。

this is how it looks like

看起来是这样的。

我想要的是,你点击“马基扎”它将打开网址视频号码1,如果你点击“电视 JOJ”它将打开网址视频号码2在球员。

我的桌面细胞:

    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")]
110594 次浏览

Swift 的工作方式与 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)使用 did SelectRowAtIndexPath

如果需要根据选择的单元格发送特定数据,可以使用 diSelectRowAtIndexPath。为了实现这一点,您需要在故事板视图中为您的接续命名(如果您也需要知道如何做,请让我知道)。

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)
}

如果你还需要其他信息,请告诉我

与斯威夫特3 & 4

在第一个 ViewController 中(发送值)

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

在第二个 viewController 中(捕捉值)

var verificationId = String()

如果不需要通过标识符来识别操作,而只需要通过目标类来识别操作..。

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