iOS block 反向传值

自定义view传出点击方法,传值

第一步:

@interface FLGHomeView : UIView

@property (nonatomic,copy)void (^noticeBlock)(NSString *noticeId);

@end

第二步:

  • (void)buttonAction:(UIButton*)button{

    self.noticeBlock(@”123456”);

}

第三步:

FLGHomeView *home = [[FLGHomeView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

home.backgroundColor = [UIColor lightGrayColor];

[self.view addSubview:home];

home.noticeBlock = ^(NSString * _Nonnull noticeId) {

    NSLog(@"-----------%@",noticeId);

};

一.block的四种形式

1.无参数,无返回值

void(^block)()=^(){

NSLog(@“今天正热”);

};

block();

——->今天正热

2.有参数,无返回值

void(^block)(int, int)=^(int a, int b){

int max=a>b?a:b;

NSLog(@“%d”,max);

};

block(10,20);

———>20

void(^block)(NSString *)=^(NSString *str){

NSLog(@“%@”,str);

};

block(@“nihao”);

———->nihao

3.有返回值,无参数

int (^block)()=^(){

return (int)100;

};

NSLog(@“%d”,block());

4.有参数,有返回值

NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSIteger index){

return arr[index];

};

block(@[@“1”,@“2”,@“3”,@“4”],1);

———->2

block传值

1.block 页面之间反向传值(数组可以改为其他的类型,字符串,字典等)(2页面传到1页面)

@ 页面1的跳转方法中:

void(^block)(NSArray *)=^(NSArray *arr){

    NSLog(@"%@",arr);

};<可以放在任何位置的>
  • (void)click:(UIButton *)button{

secondViewController *secondVC=[[secondViewController alloc] init];

[self.navigationController pushViewController:secondVC animated:YES];

secondVC.block=block;

}

@页面2.h中声明属性

@property(nonatomic,copy)void(^block)(NSArray *);

@页面2返回方法中

-(void)click:(UIButton *)button{

[self.navigationController popViewControllerAnimated:YES];

self.block(@[@"1",@"2",@"3"]);

}

2.也可以不进行传值 第二个页面返回时需要在第一个页面进行一些操作的时候可以使用block

@ 页面1的跳转方法中:

void(^block)()=^(){

// 从第二个页面回来需要进行的操作

};
  • (void)click:(UIButton *)button{

secondViewController *secondVC=[[secondViewController alloc] init];

[self.navigationController pushViewController:secondVC animated:YES];

secondVC.block=block;

}

@页面2.h中声明属性

@property(nonatomic,copy)void(^block)();

@页面2返回方法中

-(void)click:(UIButton *)button{

[self.navigationController popViewControllerAnimated:YES];

self.block();

}

headView按钮的点击跳页面方法

// 定义block

typedef void(^HomeTableBlock)(NSInteger index);

@property (nonatomic, copy) HomeTableBlock btnBlock;

// button的点击方法

  • (void)buttonAction:(UIButton *)btn {

    if (self.btnBlock) {

      self.btnBlock(btn.tag - 50000);

    }

}

// 创建头视图

  • (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

headView.btnBlock = ^(NSInteger index) {

switch (index) {

        case 1:

        {   break}case 2:

        {   break}

}

}

按钮点击操作 实时返回信息(视频下载进度)

controller的按钮

  • (void)taoAction{

/// 只执行一次 block 多次返回信息

views *view = [[views alloc] init];

[view tap:^(NSInteger a) {

    NSLog(@"-------------%ld",a);

}];

}

views.h

@property (nonatomic, copy) void(^sblock)(NSInteger a);

  • (void)tap:(void(^)(NSInteger a))blocksuccess;

views.m

  • (void)tap:(void(^)(NSInteger a))blocksuccess{

    self.sblock = blocksuccess;

}

  • (instancetype)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];

    if(self){

      [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(tapaction) userInfo:nil repeats:YES];

    }

    return self;

}

  • (void)tapaction{

    self.sblock(100);

}

自定义view传出点击方法,传值

第一步:

@interface FLGHomeView : UIView

@property (nonatomic,copy)void (^noticeBlock)(NSString *noticeId);

@end

第二步:

  • (void)buttonAction:(UIButton*)button{

    self.noticeBlock(@”123456”);

}

第三步:

FLGHomeView *home = [[FLGHomeView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

home.backgroundColor = [UIColor lightGrayColor];

[self.view addSubview:home];

home.noticeBlock = ^(NSString * _Nonnull noticeId) {

    NSLog(@"-----------%@",noticeId);

};
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!