iOS开发好文ios专题ios

使用Block实现界面反向传值

2016-07-19  本文已影响704人  J_Knight_

需求点


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

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

实现步骤


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

代码实现:


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

#import <UIKit/UIKit.h>

@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];    

}

效果图:


传值过程:由左至右

流程如下:

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

Demo可以有~

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

上一篇下一篇

猜你喜欢

热点阅读