block传值

block作为苹果主推的方法,同样是可以用来传值的。

两个页面,第一个页面有一个label,第二个页面有一个textField,将第二个页面输入的信息,在第一个页面显示。

按照代码中的步骤,并附有说明,应该很容易懂了。

第二个页面controller的.h文件(声明block)

#import <UIKit/UIKit.h>

#pragma mark - 1.typedef一个block方便后面使用
typedef void(^PassValue)(NSString *text);

@interface SecondViewController : UIViewController

#pragma mark - 2.声明一个block属性(一定要用copy)
@property(nonatomic, copy)PassValue passValue;

@end

第三步在第一个页面的controller的.m文件中(给block赋值)

第一个页面调到第二个页面的button的响应事件

- (void)doTapButton:(UIBarButtonItem *)barButtonItem
{
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    
#pragma mark - 3.给下一个页面的block属性赋值;即将block的参数给自己的UILabel的text用于显示
    secondVC.passValue = ^(NSString *text){
        ((UILabel *)self.view.subviews[0]).text = text;
    };
    
    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];
}

第四步,也是最后一步在第二个页面的.m中(什么时候执行block)

#pragma mark - 4.页面消失的时候执行前一个页面传过来的block值
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (self.passValue != nil)
    {
        // 将自己页面的textField的text作为参数传过去
        self.passValue(((UITextField *)self.view.subviews[0]).text);
    }
}

!!还有一个注意的事件就是block的释放(苹果专门为block提供了释放方法)

- (void)dealloc
{
#warning Block释放
    Block_release(_passValue);
    [super dealloc];
}

  

原文地址:https://www.cnblogs.com/sqdhy-zq/p/4803013.html