Fabrizio
Fabrizio

Reputation: 183

Passing data from a modal view

Storyboard ViewController SecondViewController

I'd like to pass data (aNumber, a variable NSString) in LabelNumber (in ViewController) from modal SecondViewController after entering numbers in TextFieldNumber using a decimal pad. I add a close button (bar button item) in the SecondViewController and connect to Segue (mySegue). In ViewController there's a Round Rect Button linked to SecondViewController Here's the code in ViewController.m

#import "ViewController.h"
#import "SecondViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *LabelNumber;
@property (weak, nonatomic) SecondViewController * SecondScreen;

 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    
if ([segue.identifier isEqualToString: @"mySegue"]){
    self.SecondScreen  = segue.destinationViewController;
      self.SecondScreen.aNumber = self.LabelNumber.text
}

- (IBAction)close:(UIStoryboardSegue*)sender {
  if([sender.identifier isEqualToString:@"mySegue"] ){
    self.LabelNumber.text = self.SecondViewController.aNumber;
}

In SecondViewController.h i've this code:

 #import <UIKit/UIKit.h>
 @interface SecondViewController : UIViewController
 @property (strong, nonatomic) NSString* aNumber;
 @end

In SecondViewController.m i've this code:

 #import "ViewController.h"
#import "SecondViewController.h"
 @interface SecondViewController () <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UITextField *TextFieldNumber; @end

 - (void)viewDidLoad
 {
[super viewDidLoad];
[self.TextFieldNumber becomeFirstResponder];
self.TextFieldNumber.delegate = self;
self.TextFieldNumber.text = self.aNumber;
 }

 - (IBAction)getValue:(UITextField *)sender {
self.aNumber = self.TextFieldNumber.text ;
[self.TextFieldNumber resignFirstResponder];
 }

At last, i've added always in SecondViewController.m that, even if i don't want to close the keyboard but i want it to stay always ON and would like to catch the TextNumber value (aNumber) in close button (modal unwind).

-(BOOL) textFieldShouldReturn:(UITextField *)textField{ if (textField == self.TextFieldNumber) [self.TextFieldNumber resignFirstResponder]; return YES; }

Upvotes: 1

Views: 331

Answers (1)

Leonardo
Leonardo

Reputation: 9857

If I understood the question correctly, you have two options:

  1. Assign the FirstViewController as delegate of SecondViewController, so that when you dismiss modal you can also call [self.delegate secondViewControllerWillDismiss:value]
  2. Make the FirstViewController listen for a custom notification, let's say "SecondViewControllerDismissNotification", and made SecondViewController send this NSNotification when dismiss. In this case you will have to write your parameter in a NSDictionary to be passed along with the notification itself.

If it's not clear I can write little example.

Upvotes: 1

Related Questions