Ich mache eine einfache iOS-Anwendung mit Tableview Controller und DetailView. Ich möchte nur Daten durch segue weiterleiten.
So sieht es aus.
Ich möchte nur, dass Sie auf "Markíza" klicken, um das URL-Video Nummer 1 zu öffnen. Wenn Sie auf "TV JOJ" klicken, wird das URL-Video Nummer 2 im Player geöffnet.
Meine Tabellenansichtszellen:
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")]
ios
iphone
uitableview
swift
detailview
Patrikbelis
quelle
quelle
Antworten:
Swift funktioniert genauso wie Obj-C, wird jedoch in der neuen Sprache überarbeitet. Ich habe nicht viele Informationen aus Ihrem Beitrag, aber lassen Sie uns jedem TableViewController einen Namen geben, um meine Erklärung zu erleichtern.
HomeTableViewController (dies ist der Screenshot, den Sie oben haben)
PlayerTableViewController (dies ist der Player-Bildschirm, zu dem Sie reisen möchten)
Vor diesem Hintergrund benötigen Sie in PlayerTableViewController eine Variable, in der die übergebenen Daten gespeichert werden. Haben Sie direkt unter Ihrer Klassendeklaration so etwas (wenn Sie die Struktur als einzelnes Objekt und nicht als Array speichern möchten:
class PlayerTableViewController: UITableViewController { var programVar : Program? //the rest of the class methods....
Danach gibt es zwei Möglichkeiten, Daten an den neuen TableViewController zu senden.
1) Verwenden von prepareForSegue
Am Ende von HomeTableViewController verwenden Sie die prepareForSegue-Methoden, um die Daten zu übergeben. Hier ist ein Beispiel für den Code, den Sie verwenden werden:
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 } }
Sobald PlayerTableViewController geladen wurde, ist die Variable bereits festgelegt und kann verwendet werden
2) Verwenden von didSelectRowAtIndexPath
Wenn bestimmte Daten basierend auf der ausgewählten Zelle gesendet werden müssen, können Sie didSelectRowAtIndexPath verwenden. Damit dies funktioniert, müssen Sie Ihrem Segue in der Storyboard-Ansicht einen Namen geben (lassen Sie mich wissen, wenn Sie auch wissen müssen, wie das geht).
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) }
Lassen Sie mich wissen, wenn Sie weitere Informationen dazu benötigen
quelle
performSegueWithIdentifier
funktioniert einwandfrei, aber dann werden keine Daten in die neue Ansicht übertragen. : [indexPathForSelectedRow
alsdidSelectRowAtIndexPath
Rückruf? Beispiel:destinationVC.programVar = products[self.tableView.indexPathForSelectedRow!.row]
in derprepareForSegue
Methode. Lassen Sie mich wissen, wenn ich falsch liege (ich bin auch neu in dem Zeug).Mit Swift 3 & 4
Im ersten ViewController (Wert senden)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if (segue.identifier == "MainToTimer") { let vc = segue.destination as! YourViewController vc.verificationId = "Your Data" } }
In der zweiten AnsichtController (Catch The Value)
var verificationId = String()
quelle
Wenn Sie die Aktion nicht anhand des Bezeichners, sondern nur anhand der Zielklasse erkennen müssen ...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? YourViewController { vc.var_name = "Your Data" } }
quelle