zoukankan      html  css  js  c++  java
  • 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];
    }
    

      

  • 相关阅读:
    java socket编程
    http协议之request
    Javaweb---Servlet过滤器
    Android -- startActivityForResult-------&&&----setResult
    javaWeb---文件上传(commons-FileUpload组件)
    如何人没有十根手指,那么人类使用的进制还是10进制吗?
    linux运维、架构之路-MySQL日志(三)
    linux运维、架构之路-xtrabackup
    linux运维、架构之路-MySQL(二)
    SDN第三次作业
  • 原文地址:https://www.cnblogs.com/sqdhy-zq/p/4803013.html
Copyright © 2011-2022 走看看