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

时间: 2024-10-13 16:03:47

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

iOS_21团购_通过block对请求工具类的代理方法进行二次封装

最终效果图: [点评]提供的工具类DPAPI 在请求完毕后,使用的是代理机制,当一次请求成功或者失败时,会调用代理的相应方法 为了将点评提供的工具类DPAPI进行二次封装, 再次定义了一个block: typedef  void(^RequestDoneCallBackBlock)(id deals,NSError *err); 该block有两个参数, 分别是成功时,服务器返回的deals字典数组 另一个参数是:请求失败时,服务器返回的失败信息 两个参数分别对应代理的两个方法(即成功.失败时分

iOS Foundation 框架中 Mutable 的类们

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Mutable 对于那些不能直接对其中内容进行更改的类来说,是一种扩展方式,象数值这类的,不涉及到指针的,就没有 Mutable 子类,可能是因为

iOS 8:【转】类簇在iOS开发中的应用

源地址:http://limboy.me/ios/2014/01/04/class-cluster.html 类簇(class cluster)是一种设计模式,在Foundation Framework中被广泛使用,举个简单的例子 NSArray *arr = [NSArray arrayWithObjects:@"foo",@"bar", nil]; NSLog(@"arr class:%@", [arr class]); // output:

IOS开发语言Swift入门连载---类和结构体

IOS开发语言Swift入门连载-类和结构体 类和结构体是人们构建代码所用的一种通用且灵活的构造体.为了在类和结构体中实现各种功能,我们必须要严格按照常量.变量以及函数所规定的语法规则来定义属性和添加方法. 与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意: 通常一个类 的实例被称为对象 .然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本

多媒体编程——ios摄像头图像抓取工具类

工具类提供预览图像画面,自动处理旋转,并且以主动方式抓取图像(这样帧率可以无限大) 系统的接口多是异步接收图像,像我这种强迫症怎么受得了,必须吧被动接收图像的方式改成主动抓取. 头文件 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> //这些比例都是4:3的比例. typedef enum TKVideoFrameSize { tkVideoFrame480x360 = 480 <

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义

iOS学习连载二之OC类和类之间的关联关系

类和类直接按存在多重关系,比如继承关系.关联关系:继承关系通俗的讲即什么是什么,关联关系即什么有什么:比如:继承关系:父亲和孩子之间的基因继承关系:关联关系:老师和学生之间的关联关系.下面讲一个例子,是汽车.引擎和车灯之间的关联关系. 首先,先写除了main类的其他类,包括.h文件和.m文件 lam.h代码: // //  Lamp.h //  oc2_Car_Engine_Lamp_test1 // //  Created by imac on 15/7/21. //  Copyright (

iOS之block浅谈

前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的. block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. block的使用 1.block的定义 // 声明和实现写在一起,就像变量的声明实现 int a

iOS: 学习笔记, 添加一个带界面约束的控制器

1. 创建一个空iOS应用程序(Empty Application). 2. 添加加控制器类. 修改控制器类的viewDidLoad 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 //创建标题 5 UILabel *header = [[UILabel alloc] init]; 6 header.text = @"欢迎来到我的世界!"; 7 header.textAlignment = NSTextAlignmentCenter