在非基于故事板的应用程序中的ViewControllers之间传递数据

时间:2017-03-28 10:53:29

标签: ios uiviewcontroller

我正在创建一个没有Storyboard的iOS应用,在AppDelegate中设置窗口的框架。

现在,我有2个视图控制器ViewController和SettingsController。在设置控制器中,我创建了一个文本字段(myTextField),我想将myTextField.text存储在变量中。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

您可以在AppDelegate文件中创建一个公共属性

@property(nonatomic,strong) NSString *passingText;

1。 ViewController 2导入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;

    }

在第二个控制器上,您可以读取appdelegate的值。

这有助于解决您的要求。

答案 1 :(得分:-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