web-dev-qa-db-fra.com

Passage de données entre des contrôleurs de vue dans Swift

J'essaie de convertir une application d'Objective-C en Swift, mais je ne trouve pas comment transférer des données entre des vues à l'aide de Swift. Mon code Objective-C est

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
AnsViewController *ansViewController;
ansViewController = [storyBoard instantiateViewControllerWithIdentifier:@"ansView"];
ansViewController.num = theNum;
[self presentViewController:ansViewController animated:YES completion:nil];

Cela consiste en fait à prendre la variable theNum et à la transmettre à la variable num sur un autre contrôleur de vue. Je sais que cela peut être une question facile, mais je suis assez confus avec Swift, donc si quelqu'un pouvait expliquer comment il l'a changé, ce serait grandement apprécié!

Merci

24
lagoon

Supposons que nous nous trouvons au firstView et au DetailView et que nous souhaitons transmettre des données de firstView à Detailview. Pour faire cela avec le storyboard, à la première vue nous aurons une méthode:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "segueTest") {
      //Checking identifier is crucial as there might be multiple
      // segues attached to same view
      var detailVC = segue!.destinationViewController as DetailViewController;
      detailVC.toPass = textField.text
    }
}

puis dans la classe de DetailView nous avons déclaré une variable:

var toPass: String!

alors vous pouvez utiliser la variable toPass (vous pouvez bien sûr changer le type de la variable à votre guise, dans cet EX, je viens de faire une démonstration du type chaîne). 

37
lee
class AnsViewController: UIViewController {
   var theNum: Int

    override func viewDidLoad() {
        super.viewDidLoad()

        println(theNum)
    }

}

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    let viewController = self.storyboard.instantiateViewControllerWithIdentifier("ansView") as AnsViewController
    viewController.num = theNum
    self.presentViewController(viewController, animated: true, completion: nil)
}
20
fuzz

Pour passer des chaînes ou des données d’un contrôleur à un autre dans Swift.

Suit les étapes ci-dessous:

1) Créer une propriété dans le contrôleur enfant en tant que var abc:string!

2) Créer un objet de childcontroller 

let storyboard:UIStoryboard()
let viewController: childcontroller = storyboard.instantiateViewControllerWithIdentifier("childcontroller") as! childcontroller
viewController.abc = "hello";
self.navigationController.pushviewController(Controller:viewController animated:true CompletionHandler:nil)
3
Rizwan Shaikh
     @IBAction func nextbtnpreesd(_ sender: Any) {

            let mystring = "2"
            performSegue(withIdentifier: "MusicVC", sender: mystring)
        }



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


        if let destination = segue.destination as? MusicVC{

            if let song = sender as? String{
                destination.strlablevalie = song
            }
        }
    }

// dans MusicVC, créez une chaîne comme celle-ci:

 var strlablevalie:String!
0
Paresh Hirpara
Using tableview,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
        {
            let ClubProfileView = self.storyboard?.instantiateViewController(withIdentifier: "CBClubProfileViewController") as! CBClubProfileViewController

            let TempCulubDic:NSDictionary =
                ((ClubsListbyDateDic.object(forKey:((ClubsListbyDateDic.allKeys as! [String]).sorted(by: <)as NSArray).object(at: indexPath.section) as! String) as! NSArray).object(at: indexPath.row))as! NSDictionary

            let ClubId:String=(TempCulubDic.value(forKey: "club_id") as? String)!

            let CheckIndate:String=(TempCulubDic.value(forKey: "chekin_date") as? String)!

            ClubProfileView.ClubID=ClubId

            ClubProfileView.CheckInDate = CheckIndate

            // self.tabBarController?.tabBar.isHidden=true

            ClubProfileView.hidesBottomBarWhenPushed = true
            self.navigationController?.pushViewController(ClubProfileView, animated: true)
            }
0
Dipesh Khandhar

Pour passer des chaînes ou des données d’un contrôleur à un autre dans Swift.

Suit les étapes ci-dessous:

1) Créez la variable de type que vous souhaitez (String, Int) Var test: String!

2) Créer un objet de childcontroller

 let vc = self.storyboard?.instantiateViewController(withIdentifier: "Here identifier of your VC") as! (Here Name Of Your Controller)
 vc.test = "Hello" (Or any data which you want to pass)
 self.navigationController?.pushViewController(VC, animated: true)

Ceci devrait régler votre problème

0
Vishal