控制器之间的数据传递——属性传值

属性传值

我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传

一. 顺传

  1. 界面2需要有一个用于接收数据的属性
  2. 界面2在压入栈之前,把界面1中的数据直接赋值给界面2的属性
  3. 界面2压入栈,实现跳转到界面2

二. 逆传

  1. 界面1需要有一个用于接收数据的属性
  2. 界面2需要有一个用于保存界面1的属性
  3. 界面2在压入栈之前,把界面1控制器赋值给界面2的属性
  4. 在界面2中,通过保存的界面1,可以把需要传的值给界面1
  5. 界面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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值