• 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];
    }
    

      

  • 相关阅读:
    JVM系列-001-JVM监控工具
    Java8-CompletableFuture
    Java8-ConcurrentUtils
    Java8-LongAccumulator
    Java8-Atomic
    Java8-ConcurrentHashMap
    Java8-Synchronized-No.02
    Java8-Synchronized-No.01
    Java8-Executors-No.03
    Java8-Executors-No.02
  • 原文地址:https://www.cnblogs.com/sqdhy-zq/p/4803013.html
Copyright © 2020-2023  润新知