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