使用Block实现界面反向传值

需求点


本文介绍如何通过设置block来实现从第二个页面返回到第一个页面时,将第二个页面的数据传给第一个页面。

通过代理设计模式也可以实现该功能,但是笔者个人感觉过程代理模式的设置比较繁琐,还是通过Block来实现更加方便一点。而且block也是iOS进阶的必经之路,多了解还是有好处的。

实现步骤


  1. 在传值类(第二页)添加block属性。
  2. 在接值类(第一页)设置传值类block代码。
  3. 特定时刻在传值类(第二页)向block传入需要传递的值。

代码实现:


第一步:在第二个页面定义block作为传值block的属性

#import 

@interface SecondViewController : UIViewController

//Block传值Step 1: 定义block为传值block的属性
@property (nonatomic, copy)void(^sendValueBlock)(NSString *valueString);

@end

第二步:在从第一个跳转到第二个页面的前一刻,设置第二个页面的block,在block内部写下待执行的操作(将传递过来的值显示在第一个页面)


/**
 *  在第一个页面点击按钮后,初始化block并跳转到第二个页面
 *
 *  @param button 第一个页面的按钮
 */

- (void)goToNextPage:(UIButton *)button
{    
    //Block传值Step 2: 接收值的类取到传递值的类的指针,并设置block

    //因为在block内,firstVC的属性可被更改,所以应该设定其关键字为__weak
    __weak ViewController *firstVC = self;
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    [secondVC setSendValueBlock:^(NSString *string) {
        firstVC.label.text = string;
    }];
    [self.navigationController pushViewController:secondVC animated:YES];
}

第三步:在从第二个页面返回到第一个页面前一刻,将数据传入block

/**
 *  在第二个页面点击按钮后,给block属性传值并回到第一个页面
 *
 *  @param button 第二个页面的按钮
 */
- (void)goToFrontPage:(UIButton *)button
{    
    //Block传值Step 3: 传值类将要传的值传入自己的block里
    self.sendValueBlock(self.textField.text);
    [self.navigationController popViewControllerAnimated:YES];    

}

效果图:


使用Block实现界面反向传值_第1张图片
传值过程:由左至右

流程如下:

  1. 在第一页点击“下一页”进入第二页。
  2. 在第二页输入要传的信息(“给第一页的值”),并点击“保存并传给上一页按钮”回到第一页。
  3. 在第一页显示传来的信息(“给第一页的值”)。

Demo可以有~

如果有小伙伴想要Demo请留下邮箱哈~

-------------------------------- 2018年7月16日更新 --------------------------------

注意注意!!!

笔者在近期开通了个人公众号,主要分享编程,读书笔记,思考类的文章。

  • 编程类文章:包括笔者以前发布的精选技术文章,以及后续发布的技术文章(以原创为主),并且逐渐脱离 iOS 的内容,将侧重点会转移到提高编程能力的方向上。
  • 读书笔记类文章:分享编程类思考类心理类职场类书籍的读书笔记。
  • 思考类文章:分享笔者平时在技术上生活上的思考。

因为公众号每天发布的消息数有限制,所以到目前为止还没有将所有过去的精选文章都发布在公众号上,后续会逐步发布的。

而且因为各大博客平台的各种限制,后面还会在公众号上发布一些短小精干,以小见大的干货文章哦~

扫下方的公众号二维码并点击关注,期待与您的共同成长~

使用Block实现界面反向传值_第2张图片
公众号:程序员维他命

你可能感兴趣的:(使用Block实现界面反向传值)