• iOS Block界面反向传值


    在上篇博客 《iOS Block简介》 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用。

    Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。
    用维基百科的话来说,Block是Apple Inc.为C、C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包。关于闭包,一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数。

    在iOS开发中,Block有很多方面的用途,界面反向传值就是其中之一。

    假如我们有一个需求如下:界面A上面有一个button、一个label。从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示。这是一个典型的反向传值的例子。这个例子的核心是:“在界面B的输入框中输入字符串,在界面A的label上显示”。Block实现反向传值。

    1、在第二个视图控制器的.h文件中定义声明Block属性:

    //定义block
    @property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);
    @interface NextViewController ()
    
    @property (weak, nonatomic) IBOutlet UITextField *inputTF;
    
    @end
    
    
    - (IBAction)BtnAction:(id)sender {
        
        //判断block是否为空
        if (self.NextViewControllerBlock) {
            self.NextViewControllerBlock(self.inputTF.text);
            
        }
        
        [self.navigationController popViewControllerAnimated:YES];
    }

    2、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性:

    @interface AViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *nextVCInfoLabel;
    
    @end
    - (IBAction)btnClicked:(id)sender {
        
        NextViewController *nextVC = [[NextViewController alloc]init];
        nextVC.NextViewControllerBlock = ^(NSString *tfText){
            self.nextVCInfoLabel.text = tfText;
        };
        
        [self.navigationController pushViewController:nextVC animated:YES];
    }

     效果如图:

    由于本文用的是XIB,省略了部分UI细节,附上本文的代码链接:源码

    哪里写的不好,望评论指点。谢过~

  • 相关阅读:
    CI框架(Codeigniter)总结
    ssh自动下载SFTP文件
    数据库设计原则
    Java代码性能优化的 39个细节
    quartz定时任务时间设置
    Myeclipse 反编译工具插件
    Maven -- 使用Myeclipse创建Maven项目
    详解Java Web项目启动执行顺序
    java web项目下的lib和build path 中jar包问题解惑
    java读取存在src目录下和存在同级目录下的配置文件
  • 原文地址:https://www.cnblogs.com/jukaiit/p/5051485.html
Copyright © 2020-2023  润新知