block传值

block做为苹果主推的方法,一样是能够用来传值的。app

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

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

 

第二个页面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赋值)it

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

- (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)class

#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提供了释放方法)import

- (void)dealloc
{
#warning Block释放
    Block_release(_passValue);
    [super dealloc];
}
相关文章
相关标签/搜索