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

原创 2016年08月29日 23:05:17

UIApplication传值

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

[UIApplication sharedApplication]可以获取到一个UIApplication对象,该对象代表当前应用程序,是一个单例对象

一. 实现步骤

  1. 在AppDelegate.h中添加一个属性用于保存传递的数据

  2. 在界面2中,用[[UIApplication sharedApplication] delegate]获取UIApplication的代理,并把值给代理

  3. 在界面1中,也用[[UIApplication sharedApplication] delegate]获取UIApplication的代理,然后获取所保存的值

二. 具体代码

1. AppDelegate类

---------- AppDelegate.h文件

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

// 用于保存视图控制器之间所要传递的值
@property (nonatomic,strong) NSString *passData;

@end

---------- AppDelegate.m文件

#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.m文件

#import "OneViewController.h"
#import "TwoViewController.h"
#import "AppDelegate.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];
  [self.navigationController pushViewController:twoVc animated:YES];

}

- (void)viewWillAppear:(BOOL)animated {

  // 获取应用程序的代理
  AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

  // 获取数据
  _textField.text = app.passData;

}

@end

3. TwoViewController类

---------- TwoViewController.m文件

#import "TwoViewController.h"
#import "AppDelegate.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 {

  // 获取应用程序的代理
  AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

  // 保存要传递的数据
  app.passData = _textField.text;

  // 跳转界面
  [self.navigationController popViewControllerAnimated:YES];

}

@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

Block传值 我们先在这里约定:界面1传值到界面2为顺传,界面2传值到界面1为逆传 一般用Block传值是为了降低视图控制器之间的耦合度,和代理传值类似主要用于逆序传值。 一. 实现步骤: ...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 18:36
  • 883

控制器之间的数据传递——storyboard中控制器的数据传递

在APP开发中,我们经常需要在不同的控制器之间进行数据传递,按照传递的方向,可分为顺传和逆传;按照是否通过第三者(如通过单例、或者文件等)传递数据,可以分为:直接传递和间接传递。 一. 在st...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 14:51
  • 809

Asp.Net Mvc 控制器与视图的数据传递

数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看。。        ...
  • manyi74
  • manyi74
  • 2014年03月06日 14:33
  • 1122

Activity之间传递数据的方式及常见问题总结

Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量。(可以考虑WeakReferences) ...
  • Rflyee
  • Rflyee
  • 2015年08月12日 11:39
  • 6914

控制器向视图传递数据的3种方式

仅供自己学习用: 在ASP.NET MVC中,控制器和视图之间的数据传递包括两个方向: 将控制器设置的数据传递到视图中,在视图中显示数据;将视图中的数据传递到控制器 中,在控制...
  • u011500419
  • u011500419
  • 2017年02月05日 09:45
  • 1047

不同类之间数据的传递的方式

不同类之间经常涉及到数据的传递,游戏中,比如2个界面等,开始我不太熟悉,有时还用静态变量去传递数据,感觉很可笑,意识到自己面向对象思想掌握的很一般般。 其实最好的办法还是通过构造方法的参数去传递数据!...
  • themagickeyjianan
  • themagickeyjianan
  • 2016年01月25日 11:16
  • 981

两个Activity之间通过Intent相互(双向)传递数据

两个Activity通过Intent相互交换数据,在Activity中用一个Button 选择是否接受数据,不能直接写在onCreate中否则在Activity1 中获取从Activity2发送的数据...
  • fuckluy
  • fuckluy
  • 2016年03月19日 22:23
  • 1394

Fragment和Fragment之间的数据传输

前面我已经实现了Activity之间以及基于Fragment的Activity之间的数据传递,现在需要实现的是由同一Activity托管的两个Fragment,及Fragment one 与 Frag...
  • geekMer
  • geekMer
  • 2015年11月13日 20:30
  • 2555

控制器之间的数据传递——全局变量传值

全局变量传值 一. 实现步骤 在界面2中声明一个全局变量,并且用它赋值保存要穿的值 在界面1中用extern声明界面2中的全局变量,就可用他保存的值赋值 二. extern优缺点 ...
  • SSIrreplaceable
  • SSIrreplaceable
  • 2016年08月29日 22:33
  • 1023

IOS在其他视图控制器中转换根视图控制器

怎么在其他视图控制器中切换根视图控制器 例如在一个普通的视图控制器UIViewControler中切换根视图控制器 1、利用UIApplacation这个类获取当前应用程序 2、设置委托对象,注意...
  • u012884714
  • u012884714
  • 2013年12月13日 17:23
  • 7547
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:控制器之间的数据传递——UIApplication传值
举报原因:
原因补充:

(最多只允许输入30个字)