Block回传值

/*
向下一个界面传值
最简单的,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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,795评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,793评论 1 32
  • 这样的生活是否是你所追求:事业小有所成,在一个城市定居着。城市中灯红酒绿的灯光也未曾让你迷乱,好似你并不属于那一类...
    星星龙阅读 3,012评论 0 1
  • 自由独立行走的火柴人~
    涂鸦小白阅读 1,852评论 2 1
  • 当一部电影或小说随着年龄境地的变化再去重新翻阅时,或许目光的焦点就不再是男女主角《傲慢与偏见》就是这样一部;从娴静...
    孟小球Sweety阅读 2,860评论 0 0