it-swarm.com.de

Bereiten Sie sich in Swift auf Segue vor

Ich bekomme die Fehlermeldung:

"UIStoryboardSegue does not have a member named 'identifier'"

Hier ist der Code, der den Fehler verursacht

if (segue.identifier == "Load View") {
    // pass data to next view
}

Auf Obj-C ist es gut, so zu verwenden:

if ([segue.identifier isEqualToString:@"Load View"]) {
   // pass data to next view
}

Was mache ich falsch?

55
nikolausindra

Dies scheint auf ein Problem in der Vorlage für die Unterklasse UITableViewController zurückzuführen zu sein. Im Lieferumfang ist eine Version der prepareForSegue-Methode enthalten, bei der Sie das Segment auspacken müssen.

Ersetzen Sie Ihre aktuelle prepareForSegue-Funktion durch:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "Load View") {
        // pass data to next view
    }
}

Diese Version entpackt die Parameter implizit, daher sollte es Ihnen gut gehen.

90
Cezar

Ich denke das Problem ist, dass man das benutzen muss! Identifikator entbündeln

Ich habe

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if segue!.identifier == "Details" {
            let viewController:ViewController = segue!.destinationViewController as ViewController
            let indexPath = self.tableView.indexPathForSelectedRow()
            viewController.pinCode = self.exams[indexPath.row]

        }

    }

Mein Verständnis ist das ohne! Sie erhalten nur einen wahren oder falschen Wert

35
Ryan Heitner

Swift 4, Swift 3

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "MySegueId" {
        if let nextViewController = segue.destination as? NextViewController {
                nextViewController.valueOfxyz = "XYZ" //Or pass any values
                nextViewController.valueOf123 = 123
        }
    }
}
32
Zaid Pathan

Schnell 1.2

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
            if (segue.identifier == "ShowDeal") {

                if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController {
                    viewController.dealEntry = deal
                }

            }
     }
10
Scott Byrns KCL

Für Swift 2.3, Swift3 und Swift4:

Erstellen Sie ein Perform-Segment unter didSelectRowAtindexPath

Für Ex: 

   self.performSegue(withIdentifier: "uiView", sender: self)

Erstellen Sie anschließend eine prepareforSegue-Funktion, um das Zielsegment abzufangen und den Wert zu übergeben:

Ex:

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

       if segue.identifier == "uiView"{

        let destView = segue.destination as! WebViewController
        let indexpath = self.newsTableView.indexPathForSelectedRow
        let indexurl = tableDatalist[(indexpath?.row)!].link
        destView.UrlRec = indexurl

        //let url =

    }
    }

Sie müssen in Destination ViewController eine Variable mit dem Namen UrlRec erstellen

10
Sandu

Bereiten Sie sich in Swift 4.2 und Swift 5 auf den Segue vor.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "OrderVC") {
        // pass data to next view
        let viewController = segue.destination as? MyOrderDetailsVC
        viewController!.OrderData = self.MyorderArray[selectedIndex]


    }
}

So rufen Sie segue bei einem bestimmten Ereignis auf (Klicken auf die Schaltfläche "Gefällt mir" usw.):

performSegue(withIdentifier: "OrderVC", sender: self)
1
M Murteza

dies ist eine der Möglichkeiten, wie Sie diese Funktion verwenden können. Sie möchten auf eine Variable einer anderen Klasse zugreifen und die Ausgabe basierend auf dieser Variablen ändern.

   override func prepare(for segue: UIStoryboardSegue, sender: Any?)  {
        let something = segue.destination as! someViewController
       something.aVariable = anotherVariable
   }
1
alex's

Wenn Sie nicht denselben Ziel-View-Controller mit unterschiedlichen Bezeichnern verwenden, kann der Code präziser sein als die anderen Lösungen (und den as! in einigen anderen Antworten vermeiden):

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if let myViewController = segue.destinationController as? MyViewController { 
        // Set up the VC
    }
}
0
Taylor