Sending data from one ViewController to another.
12,194
Using delegate:
In TestAppViewController.h:
@protocol messageDelegate <NSObject>
@optional
-(void)test:(NSString*)str;
@end
@interface SecondViewController : NSString
@property (nonatomic, assign) id <messageDelegate> delegate;
@end
In TestAppViewController.m:
-(void)readyToSend
{
[self.delegate test:@"Hello world!"];
}
In ViewController.h:
@interface ViewController : UIViewController<messageDelegate>
@end
In ViewController.m: in
- (void)viewDidLoad {
TestAppViewController * testAppViewController = [[TestAppViewController alloc] init];
testAppViewController.delegate = self;
}
-(void) test:(NSString*)str{
NSLog(@"%@,str");
}
Hope it will help!
Author by
yogesh
Updated on June 16, 2022Comments
-
yogesh almost 2 years
I have got two ViewController:
1) ViewController
2) TestAppViewController
In
ViewController.h
, I define a label, whose text I want to be sent from second viewController, i.e `TestAppViewController.For this I defined a
@property NSString *
in ViewController.h, and created an object of this ViewController in my second Controller. Then passed a value to this property, but ans is still coming nil.Following is my code :
@property (nonatomic, retain) NSString *lableName;*
ViewController
#import "ViewController.h #import "TestAppView1.h" #import "TestAppViewController2.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // [self addView1]; } - (void)viewWillAppear:(BOOL)animated { [self addView1]; NSLog(@"Label name is %@",self.lableName); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)addView1 { TestAppView1 *testAppView1Obj = [ [TestAppView1 alloc] initWithFrame:self.view.bounds]; [testAppView1Obj setDelegate:self]; [testAppView1Obj setSelectorOnButtonTapped:@selector(buttonTapped)]; [self.view addSubview:testAppView1Obj]; } -(void)buttonTapped { TestAppViewController2 *testAppViewController2Obj =[[TestAppViewController2 alloc]initWithNibName:@"TestAppViewController2" bundle:nil]; [self.navigationController pushViewController:testAppViewController2Obj animated:YES]; } @end
ViewController2
#import "TestAppViewController2.h" #import "TestAppView2.h" #import "ViewController.h" @interface TestAppViewController2 () @end @implementation TestAppViewController2 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } -(void)viewWillAppear:(BOOL)animated { [self addView2]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)addView2 { TestAppView2 *testAppView2Obj =[ [TestAppView2 alloc]initWithFrame:self.view.bounds]; [testAppView2Obj setDelegate:self]; [testAppView2Obj setSelectorOnBackButton:@selector(callbackButtonTapped)]; [self.view addSubview:testAppView2Obj]; } -(void)callbackButtonTapped { ViewController *viewControllerObj = [[ViewController alloc]init]; viewControllerObj.lableName=@"Yogesh"; [self.navigationController popViewControllerAnimated:YES]; } @end
When I try to print the values in NSLog, it gives me nil.