Je fais face au message d'erreur:
"UIStoryboardSegue does not have a member named 'identifier'"
Voici le code à l'origine de l'erreur
if (segue.identifier == "Load View") {
// pass data to next view
}
Sur Obj-C c'est bien comme ça:
if ([segue.identifier isEqualToString:@"Load View"]) {
// pass data to next view
}
Qu'est-ce que je fais mal?
Cela semble être dû à un problème dans le modèle de la sous-classe UITableViewController
. Il est livré avec une version de la méthode prepareForSegue
qui nécessiterait que vous dérouliez la séquence.
Remplacez votre fonction prepareForSegue
actuelle par:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "Load View") {
// pass data to next view
}
}
Cette version ouvre implicitement les paramètres, donc ça devrait aller.
Je pense que le problème est que vous devez utiliser le! dégrouper l'identifiant
J'ai
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]
}
}
Ma compréhension est que sans le! vous obtenez juste une valeur vraie ou fausse
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
}
}
}
Swift 1.2
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "ShowDeal") {
if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController {
viewController.dealEntry = deal
}
}
}
Pour Swift 2.3, Swift3 et Swift4:
Créez une séquence performante sur didSelectRowAtindexPath
Pour Ex:
self.performSegue(withIdentifier: "uiView", sender: self)
Après cela, créez une fonction prepareforSegue pour capturer la séquence Destination et transmettre la valeur:
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 =
}
}
Vous devez créer une variable nommée UrlRec dans Destination ViewController.
Préparez-vous à Segue dans Swift 4.2 et Swift 5.
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]
}
}
Comment appeler Segue sur un événement spécifique (comme un clic de bouton, etc.):
performSegue(withIdentifier: "OrderVC", sender: self)
c’est l’une des façons d’utiliser cette fonction, c’est lorsque vous souhaitez accéder à une variable d’une autre classe et modifier la sortie en fonction de cette variable.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let something = segue.destination as! someViewController
something.aVariable = anotherVariable
}
Si vous n'utilisez pas le même contrôleur de vue de destination avec des identifiants différents, le code peut être plus concis que les autres solutions (et évite le as!
dans certaines des autres réponses):
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if let myViewController = segue.destinationController as? MyViewController {
// Set up the VC
}
}