iOS中界面传值的几种方式

1.属性传值

属性传值适用于顺序传值,从前面的界面传值给后面的界面。

2.代理传值

用代理的方式实现界面间传值稍微复杂一点点适合从后面的界面回传给前面的界面。

注意,代理传值的逻辑是这样的,先从界面a跳转到界面b,然后从界面b回跳到界面a的时候,把界面b的值传给界面a。

注意,谁传值谁设置代理,谁传值谁调用代理方法,谁接收值谁遵循代理,谁接收值谁实现代理方法。

在SecondViewController.h里声明代理和协议

iOS中界面传值的几种方式_第1张图片
声明代理

在SecondViewController.m的跳转方法里调用代理方法

iOS中界面传值的几种方式_第2张图片
调用方法

在ViewController.m里设置代理并实现代理方法

iOS中界面传值的几种方式_第3张图片
设置代理,实现代理方法

3.block传值

block传值的思想和代理传值非常相似。

谁传值谁就要声明block,在传值界面将要消失或者说回跳的时候,把要传递的值传给block。接收值的一方调用block,并在block块里对接收到的数据进行操作。

在SecondViewController.h里定义block:

typedef void(^myBlock)(NSString* str);

@property(nonatomic,copy)myBlock sendValueBlock;

在回传方法里给block赋值:

-(void)sendBackByBlock{

    self.sendValueBlock(@"i am a block");

    [self.navigationController popViewControllerAnimated:YES];

}

在ViewController.m里接收block回传的值,并处理:

SecondViewController* secondVC = [[SecondViewController alloc] init]; secondVC.sendValueBlock = ^(NSString *string){

 NSLog(@"%@",string);

 };

4.通知传值

第二个界面给第一个界面传值,在第一个界面注册观察者,在第二个界面向通知中心发送通知。

在SecondViewController.m里向通知中心发通知:

-(void)sendBackByNotification{

    [self.navigationController popViewControllerAnimated:YES];

    NSDictionary* dict = [NSDictionary dictionaryWithObject:@"i am a notification" forKey:@"key"];

    [[NSNotificationCenter defaultCenter]postNotificationName:@"value" object:nil userInfo:dict];

}

在ViewController.m里注册观察者,并处理接收到的数据。

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(value:) name:@"value" object:nil];

-(void)value:(NSNotification*)sender{

    NSLog(@"%@",sender.userInfo[@"key"]);

}

你可能感兴趣的:(iOS中界面传值的几种方式)