Block相关(二)

前言,在上篇文章Block相关(一),中介绍了Block相关的基础知识,包括Block介绍、基础语法、使用情况等。这篇我们将介绍Blcok的实战使用环境,毕竟语言是抽象的,代码应用才是具体的。

页面值传递

我们知道在父子控制器传递值的时候,为了解耦和合理的进行值传递,我们一般会用代理或者Block。Block的灵活性在值传递的时候能很好的体现。这里我们用一个简单的通讯录添加联系人功能作为演示,效果如下:


反向传值.gif

功能主要实现了,在添加联系人页面添加一个联系人,然后保存,并在通讯录首页展示,实现代码如下:

在新建联系人页面声明一个block成员变量:(Person为联系人模型)

/* 保存联系人的block */
@property (nonatomic, strong) void (^saveBlock)(Person *);

在通讯录首页跳转到新建联系人页面时给block赋值:

        NewViewController *newVC = segue.destinationViewController;// 新建联系人控制器
        
        __weak typeof(self) weakSelf = self;
        
        /* 给block赋值 */
        newVC.saveBlock = ^(Person *person) {
            [weakSelf.personArr addObject:person];
            [weakSelf.tableView reloadData];
        };

在保存联系人时执行block:

// 点击保存按钮执行操作
- (IBAction)save:(UIButton *)sender {
    
    Person *person = [[Person alloc] init];
    person.name = self.personNamelabel.text;
    person.phoneNumber = self.personNumberlabel.text;
    
    !self.saveBlock ? : self.saveBlock(person);// 执行block
    
    // 返回通讯录首页
    [self.navigationController popViewControllerAnimated:YES];
}

这样一来就实现了,子页面向父页面逆向传值。原理有点像代理。父页面将拿到数据后要执行的操作封装到block中,由于ARC环境下,Block会复制到堆上,block对通讯录页面有强引用关系,所以新建页面执行block时候,block里面代码就可以拿到通讯录页面更新数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,122评论 25 708
  • 爱是什么, 喜欢是什么, 我都无一知晓。 于深夜里, 一灯烛火点亮屋的光。 于星宿里, 几颗眨眼精灵的朗。 于我心...
    七月上的冥王星阅读 243评论 2 2
  • 〔得到红包DAY38〕 做正确的事:尊重人才(知识分子),尊重市场(普通人) 全力以赴地做事:更专业做事,而不是靠...
    江尺澜依阅读 370评论 0 0
  • 《冬 至》 冬至寒池水结凝, 芦荻枝枯不禁风, 萧萧残荷默无语, 芳华只待夏嫣红 。
    雁飞沙阅读 223评论 0 2
  • 进入五月,世界风云际会,东方有一个女人陷落了,西方有一个男人崛起了。 陷落的这个女人叫琼瑶,对,就是那位写了一辈子...
    盛夏凉情食色馆阅读 407评论 0 1