Passing variables between view controllers

2019-01-11 14:19发布

问题:

I am using this function to switch between views in Xcode 4.3.

[self performSegueWithIdentifier:@"NextView" sender:self];

I would like to pass some parameters between pages. How can I do that?

回答1:

After performSegueWithIdentifier:sender: your view controler will call

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

assuming your new view controller has some propertys to set:

if ([[segue identifier] isEqualToString:@"NextView"]) {
    MyViewController *myVC = [segue destinationViewController];
    myVC.propertyToSet = // set your properties here
}


回答2:

This question has a very nice and correct explanation of passing data between view controllers:

Passing Data between View Controllers



回答3:

Here is the answer from Pfitz, but I made it a little easier to understand for folks who are new to Objective-C using an example:

  1. In your destinationViewController.h file add property setting for variable to 'receive' value from your source controller.m file

    @property (nonatomic) int billIdReceivingVote;
    
  2. Import your destinationViewController.h to your sourceViewController.m file:

    // VOLViewController.m
    #import "VOLVoteViewController.h
    
  3. Add prepareForSegue method to your sourceViewController.m file and pass the variables

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        VOLVoteViewController *myDestinationViewController = [segue destinationViewController];
    
        // myDestinationViewController.variable = sourceViewController variabe
        myDestinationViewController.billIdReceivingVote = [self.idOfBillSelected intValue];
    }