界面传值

四种传值的方式

1、属性传值(从前往后)

步骤:

1、属性传值用于第一个界面向第二个界面传值

2、明确二者联系的桥梁,也就是触发跳转的地方

3、明确传输的值,类型是什么

4、在第二个视图控制器内部声明相对应类型的属性,来接受传输的值

5、在第二个界面使用传入的值

2、代理传值(从后往前)

步骤:

1、声明协议

UI中的协议名称 为 当前类名 + Delegate

@protocol FourViewControllerDelegate<NSObject>

- (void)pushValue:(NSString *)text;

- (void)pushValue1:(UIColor *)color;

@end

2、声明代理

@property (nonatomic, assign) id<FourViewControllerDelegate>delegate;

3、让代理执行方法(在页面跳转处)

//判断代理人不为空,并且代理人响应了协议中的方法

if (self.delegate != nil && [self.delegate respondsToSelector:@selector(pushValue:)]) {

[self.delegate pushValue:self.textField.text];

[self.delegate pushValue1:self.view.backgroundColor];

}

4、指定代理人为自身

- (void)button {

FourViewController *four = [[FourViewController alloc] init];

//4、指定代理对象为自己

four.delegate = self;

[self.navigationController pushViewController:four animated:YES];

}

5、接受协议

@interface ThirdViewController : UIViewController<FourViewControllerDelegate>

6、实现协议方法

- (void)pushValue:(NSString *)text {

_lable.text  = text;

}

- (void)pushValue1:(UIColor *)color{

self.view.backgroundColor = color;

}

3、block传值(从后往前)

有两种方式:

一、使用block属性实现回调传值

步骤:

1、定义需要传的值得类型

typedef void (^Bada)(NSString *);

typedef void  (^Color) (UIColor *);

2、将Bloak声明成属性必须用copy修饰

@property (nonatomic, copy) Bada bada;

@property (nonatomic, copy) Color color;

3、

- (void)button {

//执行Block

if (self.bada != nil) {

self.bada(self.textField.text);

}

if (self.color != nil) {

self.color (self.view.backgroundColor);

}

[self.navigationController popToRootViewControllerAnimated:YES];

}

4、对block进行实现

SecondViewController *second = [[SecondViewController alloc] init];

second.bada = ^(NSString *str) {

self.lable.text = str;

};

second.color = ^(UIColor *color) {

self.view.backgroundColor = color;

};

[self.navigationController pushViewController:second animated:YES];

方式二:在方法中定义block实现回调传值

步骤:

1、在First.h文件中,重定义void(^)(NSString *string)类型 的别名为FirstBlock
typedef void(^FirstBlock)(NSString *string);

2、声明方法,在方法中封装block

-(void)sendNumber:(NSInteger )number andBlock: (FirstBlock)block;

3、在First.m实现 法,并执 block

-(void)sendNumber:(NSInteger )number andBlock: (FirstlBlock)block;
{

NSString *string = [NSString

stringWithFormat:@"%ld",number];

block(string);

}

4、 执行放法,实现block并接收回传过来的string值

First*first= [First alloc] init];

//执行方法

[first sendNumber:12243432 andBlock:^(NSString

*string) {

self.label.text = string;

}];

4、单例传值(可用于从第一页面直接传值给第十个页面,既可以从前往后,也可以从后往前)

步骤:

1、创建一个类继承自NSObject,在.h文件中声明一个类方法。

//单利方法是类方法, 返回值类型为instancetype

//自己定义的单例类,方法名通常都是以share开头

+ (instancetype)shareInstance;

2、在.m文件中写类方法的实现

static Handler *handler = nil;

@implementation Handler

//怎么保证 创建的 当刘对象是唯一的?

+ (instancetype)shareInstance {

@synchronized(self) {//加锁,保证创建过程同一时间内只允许一个线程对象访问,保证其唯一性(self 任意对象)

if (handler == nil) {

handler = [[Handler alloc] init];

}

}

return handler;

}

3、借助视图的即将出现和即将消失的方法,可以实现值得传递。(注意视图的加载和创建方法只会走一次,但是视图的将出现和即将消失的方法会走多次)

- (void)viewWillDisappear:(BOOL)animated {

//创建单例

Handler *handler = [Handler shareInstance];

handler.string= self.textField.text;

}

- (void)viewWillAppear:(BOOL)animated {

Handler *handler = [Handler shareInstance];

self.textField.text = handler.string;

}

传值 属性 block 单例 协议的更多相关文章

  1. iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)

    iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...

  2. iOS多页面传值方式之单例传值singleton

    // 要实现单例传值,那就必须得新建一个类做为单例 提供创建该类对象的类方法(因为是要在alloc开辟内存空间后赋值).所有在.h文件中声明该方法 + (instancetype)defaultUII ...

  3. spring学习 十七 scope属性,单例多例

    Scope属性是<bean>中的属性,取值可以有, singleton 默认值, 单例, prototype 多例, 每次获取重新实例化, request 每次请求重新实例化, sessi ...

  4. 页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,

    首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @ ...

  5. 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错

    原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...

  6. iOS页面间传值的方式 (Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)   iOS页面间传值的方式(NSUserDefault/Delegate/NSN ...

  7. iOS页面间传值的五种方式总结(Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例) iOS页面间传值的方式(NSUserDefault/Delegate/NSNot ...

  8. iOS传值之block传值(一)

    ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入 ...

  9. SpringMVC中的controller默认是单例的原因

    http://lavasoft.blog.51cto.com/62575/1394669/ 1.性能 :单例不用每次new浪费资源时间. 2.不需要:一般controller中不会定义属性这样单例就不 ...

随机推荐

  1. linux下开启mysql慢查询,分析查询语句

    一,为什么要开启这个查询呢? 数据库是很容易产生瓶颈的地方,现在Nosql大家讨论这么热,估计都被数据库搞郁闷了.mysql中最影响速度的就是那些查询非常慢的语句,这些慢的语句,可能是写的不够合理或者 ...

  2. 查询数组里有多少个数在[L,R]范围中(二分)

    使用两次二分即可得到这个值 比如现在有一个vector<int> vec,里面存放的是有序数列. 我们现在希望找出范围在[L,R]之间的数有多少个. 则有cnt = upper_bound ...

  3. (转载)C#中使用GUID

    原文地址:http://www.cnblogs.com/dongqi/archive/2008/10/13/1310128.html GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同 ...

  4. 54. Search a 2D Matrix && Climbing Stairs (Easy)

    Search a 2D Matrix Write an efficient algorithm that searches for a value in an m x n matrix. This m ...

  5. Apache配置简单http认证

    首先要说明的是这种认证是不安全的,密码是明文传输,因此很容易被各种嗅探软件嗅探到密码,只能用于简单的认证.今天上午把ownCloud卸载了,这玩 意儿中看不中用啊,原来10M的访问速度被限制成了几百K ...

  6. NOIP2012 同余方程-拓展欧几里得

    题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...

  7. Ms sql 2000互转2005

    BCP导入导出数据.非常的方便.速度很快.--还原部分,指定强制还原(使用WITH MOVE指定文件还原,RELPACE由于版本不一样,所以要指定REPLACE,如果不指定REPLACE参数,会提示版 ...

  8. web服务器长连接

    web服务器都提供长连接的方式,所谓长连接就是客户端一次请求完后,不关闭连接,保持一段时间的连接,下次此客户端再次请求时,不用创建新连接,复用所保持的连接即可.从理论上,长连接可以免去大量建立和关闭连 ...

  9. IE 下JS和CSS 阻塞后面内容总结

    总结: 1.  CSS 都是可以并行下载的. 2.  IE6 和 IE7   JS 不能并行下载,CSS 和 JS 阻塞后面内容下载. 3.  IE8   JS 还是会阻塞图片下载 开始改变加载模式, ...

  10. Nginx服务测试时的一些配置:wireshark、常用搜索URL格式、关闭防火墙、siege

    wrieshark sudo yum install wireshark-gnome sudo wireshar (以root启动,否则看不到网卡) 网站URL格式 以查询lumia为例 google ...