Passing Parameter From a View Back To another View

2019-07-27 14:47发布

问题:

i have got two view. First: FirstViewController Second: SecondViewController

FirstViewController is my UINavigationController's root controller and inside FirstViewController I ve got UITableView. When a cell is clicked in UITableView, the view is navigated to SecondViewController. Inside SecondViewController i have UILabel. I want to assign this UILabel's value to the cell which is clicked at FirstViewController when Back button is clicked in Navigation Bar. What am i supposed to do to implement this?

I can pass value to SecondViewController from FirstViewController by creating:

SecondViewController *sv; sv.somestring = someanotherstring;

but can not implement this at SecondViewController to pass the value to a NSString in FirstViewController.

Can u help me please?

Thank you. ae

回答1:

Ya , there is much a easy way to handle this.....

You can take a Global Variable

In your Delegate.h file declare your variable:

@interface Smoke_ApplicationAppDelegate : NSObject {

  UIWindow *window;
  UINavigationController *navigationController;
  NSString *messageString;  //This would be your String Variable
}
 @property(nonatomic,retain)NSString *messageString;

Secondly in Delegate.m file

@implementation Smoke_ApplicationAppDelegate

@synthesize window; 
@synthesize navigationController; 
@synthesize messageString; // Synthesize it over here..

This is Done .Now you can use this String Variable in All/any class you want..

To use this Global Variable.

Just import you Delegate file make the obj of it....

import "DelegateFile.h"

@implementation About

DelegateFile *appDel;

Now in Your class.m

-(void)viewDidLoad { [super viewDidLoad];

appDel=[[UIApplication sharedApplication]delegate];

}

Now you can access it anywhere in your class by this Object:

appDel.messageString

Just follow my Steps Carefully , I am sure this is definitely going to help you.....

Have a easy life,



回答2:

The typical way to handle this in the iPhone SDK is to define a delegate protocol. For instance:

@protocol SecondViewControllerDelegate
- (void) viewControllerWillDisappearWithLabelText: (NSString*)text;
@end

Then you would add a delegate property to your SecondViewController, like:

//in the .h file
@interface SecondViewController : UIViewController {
    //declare instance variables
}
@property(nonatomic, assign) id<SecondViewControllerDelegate> delegate;
@end

//in the .m file
@implementation SecondViewController

@synthesize delegate;

//[code...]
@end

Then you would update FirstViewController to implement the delegate protocol:

//in the .h file
@interface FirstViewController : UIViewController<SecondViewControllerDelegate> {
    //[instance variables]
}
//[methods and properties]
@end

//in the .m file
@implementation FirstViewController
//[code...]

- (void) viewControllerWillDisappearWithLabelText: (NSString*)text {
    //do whatever you need to do with the text
}

//[code...]
@end

...and to set the delegate field when FirstViewController creates the SecondViewController:

SecondViewController* sv = [[SecondViewController alloc] init]; 
sv.somestring = someanotherstring;
sv.delegate = self;

Finally, in SecondViewController you implement viewWillDisappear to be roughly like:

- (void) viewWillDisappear: (bool)animated {
    [super viewWillDisappear:animated];
    if (self.delegate) {
        [self.delegate viewControllerWillDisappearWithLabelText: myLabel.text];
    }
}


回答3:

Declare a string (stringVal)in the appdeleage and set its propert as nonatomic and retain, synthesize it also.In the second view controller you can set the label value to the appdelegate string([appdelegate setStringVal:label.text];) .You can get this value in the first view controller and use it in table(NSString *localString=appdelegate.stringVal];).

All the best.