zoukankan      html  css  js  c++  java
  • iOS中,使用block传值简单应用

         心得:

          笔者感言:解决问题的根本途径,在于知识的灵活运用,你运用的越灵活,所能解决的问题就越多,有人说,有些东西都只是最基础的,不没什么卵用。我想说的是,没什么用,你还学他干嘛,大家还学他干嘛。对于这类人,不想多说什么,我用老子的一句话表达我的观点:天下难事必起于易,简单的东西灵活运用多了,相对而言就难了,在有些人严重,也就有用了,但是一定不能舍弃基础,学到的东西,一定想着去用它,如果不想着去用它,那你费那个时间去学它干嘛?不能想着,为解决一种需求,而寻求某种特定的解决方法,要想着,当你找到一种解决某一问题的方法时,去思考,这个方法,还能解决什么问题?或者说,我再改进这个方法,它又能解决什么问题。

    block简单理解,就是一段匿名的代码块,是具有某种功能的代码块。使用block,更多的是为了两个页面之间的传值。

    有些时候,两个页面之间传值,使用其它方法,会导致两者,循环引用,因此,一些特殊的传值方式就产生了。而block使用起来,更加灵活,更加方便。

    下面已一个简单的例子看一下,他们之间的传值,页面A点击按钮,跳转到页面B,然后把页面B中的值传入到A中。

    ViewController.m文件

    #import "ViewController.h"

    #import "NewViewController.h"

    @interface ViewController ()

    {

        NSString *text;

    }

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.view.backgroundColor = [UIColor blueColor];

    //创建一个button按钮,实现视图跳转功能

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

        button.frame = CGRectMake(50, 100, 100, 100);

        button.backgroundColor = [UIColor greenColor];

        [self.view addSubview:button];

        [button addTarget:self action:@selector(getPress) forControlEvents:UIControlEventTouchUpInside];

    }

    - (void)getPress{

        NewViewController *view = [[NewViewController alloc]init];

        [self presentViewController:view animated:YES completion:^{        

        }];

        

        //得到页面B中的block,获取到B页面中的参数

        [view setMyBlock1:^(NSString *a) {

                    NSLog(@"%@",a);

            

        }];

        

    //得到页面B中的block,获取参数,并传入返回值    

        [view setMyBlock2:^int(NSString *b) 

            NSLog(@"%@",b);

    //传入返回值,可以再B页面中使用

            return 998

        }]; 

    }

     NewViewController.h文件中

    #import <UIKit/UIKit.h>

    @interface NewViewController : UIViewController

    //有参数,无返回值 

    @property(nonatomic,copy)void (^myBlock1)(NSString *a);

     //有参数,有返回值

    @property(nonatomic,copy)int (^myBlock2)(NSString *b);

    @end

     NewViewController.m文件中

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.view.backgroundColor = [UIColor orangeColor];

    //创建一个button按钮,实现视图跳转功能

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

        button.frame = CGRectMake(50, 100, 100, 100);

        button.backgroundColor = [UIColor greenColor];

        [self.view addSubview:button];

        [button addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];    

    }

    //button的点击事件

    - (void)press{    

        NSString *b = @"小龙女";

        //要传的参数,放入到block中

        _myBlock1(b);

        NSString *c = @"杨过";

        int count;

    //接收返回值,并传入参数

        count = _myBlock2(c);

        NSLog(@"count = %d",count);

        

        [self dismissViewControllerAnimated:YES completion:^{

            

        }];    

    }

      心得:从上面可以看出,block可以双向传值,即说的回调。

      我个人理解,传值可以分为两种,一是正向传值,二,是逆向传值。

      以上面两个视图为例,A页面可以present到B页面,若从A传值到B,则可以理解为正向传值,这种传值,方法较多,也比较简单。

      而,要想从B页面中传值到A,一些方法,会导致循环引用,这时使用block,比较简单便捷。我理解为它为逆向传值。当然,还有其它许多传值方式,如代理,通知,kvo。

  • 相关阅读:
    IE6 PNG透明终极解决方案(打造W3CfunsIE6PNG最强帖)
    python处理异常(1) 分类: python 20130116 17:59 274人阅读 评论(0) 收藏
    输出列表中出现次数最多的元素 分类: python 20130115 15:25 990人阅读 评论(0) 收藏
    python性能优化摘录 分类: python 20130117 18:01 1192人阅读 评论(0) 收藏
    Pyscripter下载地址及UnicodeEncodeError: 'ascii' codec解决方法 分类: software 问题总结 20130116 15:41 3384人阅读 评论(0) 收藏
    python性能优化摘录(二) 分类: python 20130118 11:27 291人阅读 评论(0) 收藏
    python简明教程os模块 分类: python 20121227 11:54 200人阅读 评论(0) 收藏
    转换时间格式 及 列表综合 分类: python 20121226 17:54 182人阅读 评论(0) 收藏
    lambda()函数 分类: python 20121227 18:01 569人阅读 评论(0) 收藏
    file()创建文件方法 分类: python python基础学习 20121224 18:17 239人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/zxh-iOS/p/zhangxianhong.html
Copyright © 2011-2022 走看看