zoukankan      html  css  js  c++  java
  • iOS:使用block进行类与类,控制器与控制器之间的传值

    介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值、代理传值、通知传值、block传值或者一些偏好设置也可以用来传值。。。。

    每一种传值方式都有各自的优点和缺点,针对不同情况选择符合需要的方式进行传值。这里我比较喜欢block方式传值,个人觉得简单好用,省却了不少代码。

    下面简单给一个在控制器之间FirstViewController和SecondViewController使用block传值的例子:

    在SecondViewController中:

    SecondViewController.h文件

    复制代码

    //
    //  SecondViewController.h
    //  block传值
    //
    //  Created by mac on 16/6/16.
    //  Copyright © 2016年 JDYang. All rights reserved.
    //

    #import <UIKit/UIKit.h>

    /**
     *  定义一个block别名,方便使用,该block返回值为void类型,有一个参数为字符串类型
     */
    typedef void (^ReturnValueByBlock)(NSString *text);


    @interface SecondViewController : UIViewController
    /**
     *  声明一个block变量
     */
    @property (copy,nonatomic)ReturnValueByBlock returnBlock;


    /**
     *  声明一个实例方法,block代码块作为参数
     */
    -(void)returnValue:(ReturnValueByBlock) block;
    @end
    复制代码

    SecondViewController.m文件

    复制代码

    //
    //  SecondViewController.m
    //  block传值
    //
    //  Created by mac on 16/6/16.
    //  Copyright © 2016年 JDYang. All rights reserved.
    //

    #import "SecondViewController.h"

    @interface SecondViewController ()

    @end

    @implementation SecondViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
       
        //返回
        self.view.backgroundColor = [UIColor greenColor];
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(back:)];
    }

    //返回
    -(void)back:(UIBarButtonItem *)sender{
       
        [self.navigationController popViewControllerAnimated:YES];
       
        //给block参数赋值
        self.returnBlock(@"我是赛亚人!");
    }

    //通过实例方法回传值
    -(void)returnValue:(ReturnValueByBlock)block{
        self.returnBlock = block;
    }
    @end
    复制代码

    在FirstViewController中:

    FirstViewController.m文件

    复制代码

    //
    //  ViewController.m
    //  block传值
    //
    //  Created by mac on 16/6/16.
    //  Copyright © 2016年 JDYang. All rights reserved.
    //

    #import "FirstViewController.h"
    #import "SecondViewController.h"

    @interface FirstViewController ()
    @end

    @implementation FirstViewController

    - (void)viewDidLoad {
        [super viewDidLoad];

        //创建按钮
        UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
        btn.center = self.view.center;
        btn.backgroundColor = [UIColor redColor];
        [btn setTitle:@"入栈" forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(push:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btn];
    }

    //入栈
    -(void)push:(UIButton *)sender{

        SecondViewController *secondVC = [[SecondViewController alloc]init];
        [self.navigationController pushViewController:secondVC animated:YES];
       
        //接收回传的值
        [secondVC returnValue:^(NSString *text) {
            NSLog(@"%@",text);
        }];
    }
    @end
     
  • 相关阅读:
    阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
    CentOS 7配置成网关服务器
    Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner
    Docker卸载高版本重装低版本后启动提示:driver not supported
    Redis连接出现Error: Connection reset by peer的问题是由于使用Redis的安全模式
    Mac流量监控/硬盘监控小工具
    CentOS 7创建自定义KVM模板(现有KVM迁移到另外一台机)
    vi显示行号
    阿里云与微软云的对照表
    CentOS下安装Jenkins(Docker/war/tomcat/java -jar)
  • 原文地址:https://www.cnblogs.com/jordanYang/p/5597820.html
Copyright © 2011-2022 走看看