/*
向下一个界面传值
最简单的,1、给下一个界面定义属性 2、在下一个界面赋值 3、在跳转位置传属性值
向上一个界面传值
很简单的三步:1、给下一个界面定义block 2、在下一个界面调用 3、在跳转位置给下一个界面对象的block回调
*/
一对多
Block
可以截获局部变量的匿名函数叫做Block 也叫做快函数
是IOS4.0后引入,作为C语言的扩展,因为C语言不支持函数匿名,C中必须有函数名称才可以调用
语法: 声明、定义、调用、略
与C语言的区别:
C函数不可以嵌套定义C函数,但是可以在C函数,OC方法/Block函数内嵌套定义Block函数
对于返回值参完全相同的Block函数,可以使用函数名赋值,
对于返回值/参完全相同的Block函数,可以将它做成一种类型,用这种类型可以定义变量,但是对此变量赋值
Block函数可以作为变量,也可以作为OC的属性
//本界面
#import "ViewController.h"
#import "NextViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameF;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)gotoClick:(UIButton *)sender {
//初始化界面
NextViewController *next = [[NextViewController alloc]init];
//回调
next.nameVc = self.nameF.text;
//给下一个界面对象的block回调
next.goBackName = ^(NSString * _Nonnull string) {
NSLog(@"%@",string);
self->_nameF.text = string;
} ;
//跳转到下一界面
[self presentViewController:next animated:YES completion:^{
}];
}

//下一界面
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface NextViewController : UIViewController
#pragma mark - 上一个界面的名字
//给下一界面定义属性
@property (nonatomic , copy ) NSString *nameVc;
//定义block
@property (nonatomic , copy) void (^goBackName)(NSString *);
@end
#import "NextViewController.h"
@interface NextViewController ()
@property (weak, nonatomic) IBOutlet UITextField *name;
@property (weak, nonatomic) IBOutlet UITextField *password;
@end
@implementation NextViewController
- (void)viewDidLoad {
[super viewDidLoad];
//页面颜色
self.view.backgroundColor = [UIColor lightGrayColor];
//给下一界面赋值
self.name.text = self.nameVc;//赋值
// Do any additional setup after loading the view from its nib.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (IBAction)goBack:(UIButton *)sender {
//调用
self.goBackName(self.name.text);
//跳转到上一界面
[self dismissViewControllerAnimated:YES completion:^{
}];
}

网友评论