Ios 在非基于脚本的情节提要应用程序中的ViewController之间传递数据

Ios 在非基于脚本的情节提要应用程序中的ViewController之间传递数据,ios,uiviewcontroller,Ios,Uiviewcontroller,我正在创建一个没有故事板的iOS应用程序,在AppDelegate中设置窗口的框架 现在,我有两个视图控制器:ViewController和SettingsController。在设置控制器中,我创建了一个文本字段(myTextField),我想将myTextField.text存储在变量中。 我该怎么办?SecondViewController.h #import <UIKit/UIKit.h> @protocol SecondViewControllerDelegate <

我正在创建一个没有故事板的iOS应用程序,在AppDelegate中设置窗口的框架

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

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
#导入
@协议二级ViewControllerDelegate
@可选的
-(void)SecondViewDiEndeditingText:(UITextField*)textField;
@结束
@界面SecondViewController:UIViewController
@属性(非原子,弱)id委托;
@结束
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
#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
#导入“SecondViewController.h”
@接口SecondViewController()
@属性(非原子,强)UITextField*textField;
@结束
@第二视图控制器的实现
-(无效)viewDidLoad{
[超级视图下载];
[自我文本字段];
}
-(UITextField*)textField
{
如果(!\u textField){
_textField=[[UITextField alloc]initWithFrame:CGRectMake(100,50,80,40)];
_textField.delegate=self;
[self.view addSubview:_textField];
}
返回文本字段;
}
-(无效)textFieldDidBeginEditing:(UITextField*)textField
{
if([self.delegate respondsToSelector:@selector(secondviewdideditingtext:)])){
[self.delegate secondviewdeditingtext:textField];
}
}
@结束
ViewController.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
#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
#导入“ViewController.h”
#导入“SecondViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
}
-(无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件
{
SecondViewController*secondVC=[SecondViewController新建];
secondVC.delegate=self;
[self-presentViewController:secondVC动画:是完成:空];
}
-(void)SecondViewDiEndeditingText:(UITextField*)textField
{
NSLog(@“SecondViewControllerText:%@”,textField.text);
}
@结束

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

@property(nonatomic,strong) NSString *passingText;
一,。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的值


这将有助于解决您的需求。

首先在谷歌上搜索并学习基本概念。我知道如何使用故事板来实现这一点,但如果没有它,我将无法在互联网上找到任何东西,所以,如果您知道如何在VC2和VC1之间传递数据,我将非常感谢您的帮助。请检查我的答案。使用PrepareForsgue在ViewControllers之间传递数据在这里,问题基于自定义协议,在VC2和VC1之间传递数据第一个代码段是错误的。另外,使用UserDefaults在视图控制器之间传递数据也不是一个好主意。因为我的英语不好,我不理解他的问题,现在明白了。我重新编辑了我的答案。这里的问题基于自定义协议,在VC2和VC1之间传递数据