控制器之间的数据传递——属性传值
2016-08-29 16:52
253 查看
属性传值
我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传一. 顺传
界面2需要有一个用于接收数据的属性界面2在压入栈之前,把界面1中的数据直接赋值给界面2的属性
界面2压入栈,实现跳转到界面2
二. 逆传
界面1需要有一个用于接收数据的属性界面2需要有一个用于保存界面1的属性
界面2在压入栈之前,把界面1控制器赋值给界面2的属性
在界面2中,通过保存的界面1,可以把需要传的值给界面1
界面2出栈,跳转到界面1
三. 具体实现
1. AppDelegate类
#import "AppDelegate.h" #include "OneViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. 创建窗口 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; // 2. 创建窗口的根控制器 // 2.1 创建导航控制器的根控制器 UIViewController *oneVc = [[OneViewController alloc] init]; // 2.2 创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:oneVc]; // 2.3 给窗口设置根控制器 self.window.rootViewController = nav; // 3. 设置窗口为主窗口并显示窗口 [self.window makeKeyAndVisible]; // 隐藏导航控制器的导航条 nav.navigationBarHidden = YES; return YES; } @end
2. OneViewController类
---------- OneViewController.h文件 #import <UIKit/UIKit.h> @interface OneViewController : UIViewController // 用于保存数据 @property (nonatomic,strong) NSString *oneStr; @end ---------- OneViewController.m文件 #import "OneViewController.h" #import "TwoViewController.h" @interface OneViewController () @property (nonatomic,strong) UITextField *textField; @end @implementation OneViewController - (void)viewDidLoad { [super viewDidLoad]; //设置控制器View的背景颜色 self.view.backgroundColor = [UIColor greenColor]; // 创建点击按钮 UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom]; clickBtn.frame = CGRectMake(10, 100, 80, 40); clickBtn.backgroundColor = [UIColor whiteColor]; [clickBtn setTitle:@"到界面2" forState:UIControlStateNormal]; [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:clickBtn]; // 创建文本框 _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)]; _textField.borderStyle = UITextBorderStyleRoundedRect; _textField.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_textField]; } #pragma mark - 点击事件 - (void)btnClick { // 创建界面2 TwoViewController *twoVc = [[TwoViewController alloc] init]; // 把自己赋值给要跳转控制器的属性,用于数据的逆传 twoVc.oneVC = self; // 把文本框的值赋值给twoVc控制器 twoVc.twoStr = _textField.text; // twoVc控制器压入栈,显示该界面2 [self.navigationController pushViewController:twoVc animated:YES]; } - (void)viewWillAppear:(BOOL)animated { _textField.text = _oneStr; } @end
3. TwoViewController
---------- TwoViewController.h文件 #import <UIKit/UIKit.h> @class OneViewController; @interface TwoViewController : UIViewController // 用于保存数据 @property (nonatomic,strong) NSString *twoStr; // 保存前一个控制器 @property (nonatomic,strong) OneViewController *oneVC; @end ---------- TwoViewController.m文件 #import "TwoViewController.h" #import "OneViewController.h" @interface TwoViewController () @property (nonatomic,strong) UITextField *textField; @end @implementation TwoViewController - (void)viewDidLoad { [super viewDidLoad]; //设置控制器View的背景颜色 self.view.backgroundColor = [UIColor yellowColor]; // 创建点击按钮 UIButton *clickBtn = [UIButton buttonWithType:UIButtonTypeCustom]; clickBtn.frame = CGRectMake(10, 100, 80, 40); clickBtn.backgroundColor = [UIColor whiteColor]; [clickBtn setTitle:@"传 值" forState:UIControlStateNormal]; [clickBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [clickBtn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; [clickBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:clickBtn]; // 创建文本框 _textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 150, 250, 40)]; _textField.borderStyle = UITextBorderStyleRoundedRect; _textField.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_textField]; } #pragma mark - 点击事件 - (void)btnClick { // 给界面1传递数据 _oneVC.oneStr = _textField.text; // 跳转界面 [self.navigationController popViewControllerAnimated:YES]; } - (void)viewWillAppear:(BOOL)animated { _textField.text = _twoStr; } @end
相关文章推荐
- 控制器之间的数据传递——通知传值
- 控制器之间的数据传递——NSUserDefaults传值
- Controller之间传递数据:属性传值
- 控制器和视图之间传递数据的几种方式
- Controller之间传递数据:Block传值
- 《iOS开发笔记—控制器之间数据的双向传递》
- 控制器之间的数据传递——storyboard中控制器的数据传递
- ios-day13-01(私人通讯录。控制器之间的数据传递、保存密码和自动登录的实现、普通对象的归档、UITableView的局部刷新和向左滑动删除功能等等)
- 两个控制器之间的数据传递 (MVC)
- 安卓与后台之间使用json传递数据需要注意类属性名称
- 控制器之间的数据传递——Block传值
- 导航控制器下UIViewController之间的传值 ------ 代理(delegate)传值 单例传值 Target-Action传值 属性传值
- iOS实现两个控制器之间数据的双向传递
- MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下:
- ios控制器之间传值-属性传值(正向传值)
- 【iOS7的一些总结】2、视图控制器ViewControllers之间的数据传递(1)
- iOS开发中视图控制器ViewControllers之间的数据传递
- ASP.NET MVC 之控制器与视图之间的数据传递
- vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据
- 控制器之间的数据传递——代理传值