iOS中界面传值的方法总结

来源:互联网 发布:fanuc离线编程软件 编辑:程序博客网 时间:2024/05/02 23:41

ios(学习)界面传值的方法

block:

实现界面传值的方法1.block:

实现界面传值,都是从第二个界面向第一个界面传值:第一种block

首先).在第二个界面secondViewController声明set方法

声明block

@property (nonatomic,copy) void(^change)(UIColor *color);

其次).在.m文件实现

实现block的方法

_callback([UIColor redColor]);//注意这里之所以是_callback的原因是实现的get方法,默认的_callback

最后)通过第二个视图控制器带回给firstViewController

实现block里写的方法传给firstViewController

[sv setCallback:^(UIColor *color) {

self.view.backgroundColor = color;

}];

通知中心:

实现界面传值的方法2.通知中心:

首先).注册观察者,然后跳转到第二个界面,在第二个界面进行广播,实现注册时的方法,改变第一个页面的颜色

通过通知中心的方法首先注册一个观察者在firstViewController

1.注册

在通知中心里注册一个观察者self

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notification ) name:@”changeColor” object:nil];

2.其次在secondViewController进行广播

广播

[[NSNotificationCenter defaultCenter]postNotificationName:@”changeColor” object:nil];

3.找到之前的颜色

-(void)notification{

self.view.backgroundColor = [UIColor blueColor];

}

代理

实现界面传值的方法3:代理

首先

从第二个界面向第一个界面传值,我们使用的代理。第二个界面为被代理者,首先要制定协议

协议的本质就是一个方法列表

@protocol Protocal

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

@end

在协议里面写一个方法,给遵从协议者的奖励

然后告诉说明只要符合以下就可以实现代理

@property (nonatomic,assign) id delegate;

在.m文件中实现方法,用来给予遵从协议的一方

其次:

遵守者,遵守代理协议的一方首先要遵从协议

然后便会获得协议制订者给予的奖励

-(void)changeBackColor:(UIColor *)color

{

self.view.backgroundColor = color;

}

4.该方法是通过获得上一个视图控制器,然后改变其中的内容后传给上一个视图控制器,此处用到了数组,因为视图控制器在多页面跳转时是以棧的形式然后存取是按照数组存取的,方法的实现在secondViewController

NSArray *arr = self.navigationController.viewControllers;UIViewController *s = [arr objectAtIndex:0];s.view.backgroundColor = [UIColor redColor];[self.navigationController popViewControllerAnimated:YES];

5.单例传值单例传值—-从前往后或者从后往前
单例传值
1.定义单例类, 提供创建单例对象的+号方法 命名规范:以main shared standard defalut开头
2.在单例类中定义属性, 存储要传递的数据(属性类型和传输数据类型一致)
3.在进入下一界面之前, 将数据让单例对象存储

4.在其他界面中 直接从单例对象中获取数据即可

单例:保证一个类只能有一个对象
新建单例类 添加创建对象的+号方法, 内部保证无盖该方法调用多少次. 对象只创建一个.
单例优势:(1)节省空间(只能创建一个对象)
(2)共享内存单元
弊端: 单例的空间在整个应用程序运行期间空间都不会回收. 会存在内存泄露问题, 他存在的意义在于解决特定的问题

.h
@interface Singleton : NSObject
//提供创建单例对象的便利构造器方法, 命名规范:以main shared standard defalut开头
+ (Singleton *)mainSignleton;
//存储输入框中的数据
@property (nonatomic, copy) NSString * data;
@end

.m
+ (Singleton *)mainSignleton
{
//加同步锁:
@synchronized (self){
//静态变量
//初始化一次
static Singleton * singleton = nil;
if (singleton == nil) {
singleton = [[Singleton alloc] init] ;
}
return singleton;
}
}

0 0