Block回传值

2018-11-15  本文已影响0人  孙卓卓

/*
向下一个界面传值
最简单的,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:^{
      
  }];
}
屏幕快照 2018-11-15 上午10.32.35.png

//下一界面
#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:^{
        
    }];
}

屏幕快照 2018-11-15 上午10.34.48.png
上一篇 下一篇

猜你喜欢

热点阅读