2017-03-28 2 views
-3

Je crée une application iOS sans Storyboard, en définissant le cadre de la fenêtre dans AppDelegate.Transmettre des données entre ViewControllers dans une application de storyboard non basée

Maintenant, j'ai 2 contrôleurs de vue le ViewController et le SettingsController. Dans le contrôleur de paramètres, j'ai créé un champ de texte (myTextField) que je veux stocker le myTextField.text dans une variable. Comment puis-je faire?

+1

Première recherche sur google et apprendre les concepts de base. –

+1

Je sais comment faire cela avec storyboard, mais comment sans je ne peux rien trouver sur internet, donc si vous savez comment j'apprécierais votre aide. – TBDevOfWorldOfSwIFT

+0

Vérifie ma réponse. –

Répondre

0

Vous pouvez créer une propriété publique à l'intérieur de fichier AppDelegate,

@property(nonatomic,strong) NSString *passingText; 

1. ViewController 2 importation Appdelegate:

@interface viewcontroller2() 
    { 
    AppDelegate *appdelegate; 
    } 
    @end 

    - (void)viewDidLoad 
    { 
    appdelegate = (AppDelegate *)[UIApplication SharedApplication].delegate; 
    } 
    Once user entered text in myTextField, using delegate: 

    - (void)textFieldDidEndEditing:(UITextfield *)textField 
    { 
    appdelegate.passingText = textField.text; 

    } 

Le second contrôleur, vous pouvez lire la valeur de appdelegate.

Cela aidera à résoudre votre besoin.

+0

ici question est basée sur des protocoles personnalisés, en passant des données entre VC2 à VC1 –

-2

SecondViewController.h

#import <UIKit/UIKit.h> 

@protocol SecondViewControllerDelegate <NSObject> 

@optional 
- (void)secondViewDidEndEditingText:(UITextField *)textField; 

@end 

@interface SecondViewController : UIViewController 

@property (nonatomic, weak) id<SecondViewControllerDelegate> delegate; 

@end 

SecondViewController.m

#import "SecondViewController.h" 

@interface SecondViewController()<UITextFieldDelegate> 
@property (nonatomic, strong) UITextField *textField; 
@end 

@implementation SecondViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self textField]; 
} 

- (UITextField *)textField 
{ 
    if (!_textField) { 
     _textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 50, 80, 40)]; 
     _textField.delegate = self; 
     [self.view addSubview:_textField]; 
    } 
    return _textField; 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if ([self.delegate respondsToSelector:@selector(secondViewDidEndEditingText:)]) { 
     [self.delegate secondViewDidEndEditingText:textField]; 
    } 
} 

@end 

ViewController.m

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

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    SecondViewController *secondVC = [SecondViewController new]; 
    secondVC.delegate = self; 
    [self presentViewController:secondVC animated:YES completion:NULL]; 
} 

- (void)secondViewDidEndEditingText:(UITextField *)textField 
{ 
    NSLog(@"SecondViewControllerText:%@", textField.text); 
} 


@end 
+0

ici question est basée sur des protocoles personnalisés, en passant des données entre VC2 à VC1 –

+0

Ce premier extrait de code est erroné. En outre, l'utilisation de UserDefaults dans le but de transmettre des données entre les contrôleurs de vue n'est * pas * une bonne idée du tout. –

+0

Parce que mon anglais n'est pas bon, je n'ai pas compris sa question, maintenant comprendre. J'ai réédité ma réponse. – zzqiltw