且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

iOS:使用block进行类与类,控制器与控制器之间的传值

更新时间:2022-09-12 14:02:37

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

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

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

SecondViewController中:

SecondViewController.h文件

iOS:使用block进行类与类,控制器与控制器之间的传值
//
//  SecondViewController.h
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. 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
iOS:使用block进行类与类,控制器与控制器之间的传值

SecondViewController.m文件

iOS:使用block进行类与类,控制器与控制器之间的传值
//
//  SecondViewController.m
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. 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
iOS:使用block进行类与类,控制器与控制器之间的传值

 

FirstViewController中:

FirstViewController.m文件

iOS:使用block进行类与类,控制器与控制器之间的传值
//
//  ViewController.m
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. 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
iOS:使用block进行类与类,控制器与控制器之间的传值

 

每次返回时打印结果:

2016-03-16 20:41:45.762 block传值[6511:271329] 我是中国人!

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5285088.html,如需转载请自行联系原作者