/*
向下一個界面?zhèn)髦?br>
最簡單的互亮,1余素、給下一個界面定義屬性 2桨吊、在下一個界面賦值 3、在跳轉(zhuǎn)位置傳屬性值
向上一個界面?zhèn)髦?br>
很簡單的三步:1洛搀、給下一個界面定義block 2、在下一個界面調(diào)用 3彰檬、在跳轉(zhuǎn)位置給下一個界面對象的block回調(diào)
*/
一對多
Block
可以截獲局部變量的匿名函數(shù)叫做Block 也叫做快函數(shù)
是IOS4.0后引入逢倍,作為C語言的擴展较雕,因為C語言不支持函數(shù)匿名郎笆,C中必須有函數(shù)名稱才可以調(diào)用
語法: 聲明忘晤、定義设塔、調(diào)用闰蛔、略
與C語言的區(qū)別:
C函數(shù)不可以嵌套定義C函數(shù)图柏,但是可以在C函數(shù)序六,OC方法/Block函數(shù)內(nèi)嵌套定義Block函數(shù)
對于返回值參完全相同的Block函數(shù),可以使用函數(shù)名賦值蚤吹,
對于返回值/參完全相同的Block函數(shù)例诀,可以將它做成一種類型,用這種類型可以定義變量裁着,但是對此變量賦值
Block函數(shù)可以作為變量繁涂,也可以作為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];
//回調(diào)
next.nameVc = self.nameF.text;
//給下一個界面對象的block回調(diào)
next.goBackName = ^(NSString * _Nonnull string) {
NSLog(@"%@",string);
self->_nameF.text = string;
} ;
//跳轉(zhuǎn)到下一界面
[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 {
//調(diào)用
self.goBackName(self.name.text);
//跳轉(zhuǎn)到上一界面
[self dismissViewControllerAnimated:YES completion:^{
}];
}