iOS - PassData
前言
页面传值:
复合传值
- 单例传值
userDefaults 传值
- 代理传值
Block/闭包传值
1、复合传值
复合 - 正向传值
- 1、接收方,头文件中创建可存放传递值的属性变量
- 2、发送方,包含接收方的头文件
- 3、发送方,实例化接收方对象,并设置其属性变量的值
- 4、接收方,将此属性变量的值输出
Objective-C
Page2.h
// 1、接收方,头文件中创建可存放传递值的 “属性变量”@property(nonatomic, copy)NSString *receiveText;
Page1.m
// 2、发送方,包含接收方的头文件#import "Page2.h"// 3、发送方,实例化接收方对象,并设置其 “属性变量” 的值Page2 *pvc2 = [[Page2 alloc] init];pvc2.receiveText = sendTextFiled.text;
Page2.m
// 4、接收方,将此 “属性变量” 的值输出receiveLabel.text = self.receiveText;
Swift
Page2.swift
// 1、接收方,头文件中创建可存放传递值的 “属性变量”var receiveText:String?
Page1.swift
// 3、发送方,实例化接收方对象,并设置其 “属性变量” 的值let pvc2 = Page2()pvc2.receiveText = sendTextFiled.text;
Page2.swift
// 4、接收方,将此 “属性变量” 的值输出receiveLabel.text = self.receiveText
2、单例传值
单例 - 正/反向传值
1、创建单例类,并在其头文件中创建可存放传递值的属性变量
- 2、发送方,包含单例类头文件
3、发送方,创建单例类对象,并为其属性变量赋值
- 4、接收方,包含单例类头文件
5、接收方,创建单例类对象,取其属性变量的值,输出
Objective-C
创建单例类
SingleClass.h
#import <Foundation/Foundation.h>@interface SingleClass : NSObject// 1、创建单例类,并在其头文件中创建可存放传递值的 “属性变量”@property (nonatomic, copy)NSString *singleText;+ (SingleClass *)sharedSingleClass;@end
SingleClass.m
#import "SingleClass.h"@implementation SingleClass+ (SingleClass *)sharedSingleClass {static SingleClass *single = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{single = [[SingleClass alloc] init];});return single;}@end
Page3.m
// 2、发送方,包含单例类头文件#import "SingleClass.h"// 3、发送方,创建单例类对象,并为其 “属性变量” 赋值[SingleClass sharedSingleClass].singleText = sendTextFiled.text;
Page4.m
// 4、接收方,包含单例类头文件#import "SingleClass.h"// 5、接收方,创建单例类对象,取其 “属性变量” 的值,输出receiveLabel.text = [SingleClass sharedSingleClass].singleText;
Swift
创建单例类
SingleClass.swift
import UIKitclass SingleClass {// 1、创建单例类,并创建可存放传递值的 “属性变量”var singleText:String?static let sharedSingleClass = SingleClass()private init() {}}
Page3.swift
// 3、发送方,创建单例类对象,并为其 “属性变量” 赋值SingleClass.sharedSingleClass.singleText = sendTextFiled.text
Page4.swift
// 5、接收方,创建单例类对象,取其 “属性变量” 的值,输出receiveLabel.text = SingleClass.sharedSingleClass.singleText
3、NSUserDefaults 传值
NSUserDefaults - 正/反向传值
- 1、发送方,创建 userDefaults,并以一个固定的 key 值存储数据,发送传递值
2、发送方,创建 userDefaults 同步数据
3、接收方,创建 userDefaults,并以相同的 key 值读取数据,接收传递值
Objective-C
Page5.m
// 1、发送方,创建 userDefaults,并以一个固定的 key 值存储数据,发送传递值[[NSUserDefaults standardUserDefaults] setObject:sendTextFiled.text forKey:@"userDefaultsText"];// 2、发送方,创建 userDefaults 同步数据[[NSUserDefaults standardUserDefaults] synchronize];
Page6.m
// 3、接收方,创建 userDefaults,并以相同的 key 值读取数据,接收传递值receiveLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"userDefaultsText"];
Swift
Page5.swift
// 1、发送方,创建 userDefaults,并以一个固定的 key 值存储数据,发送传递值NSUserDefaults.standardUserDefaults().setObject(sendTextFiled.text, forKey: "userDefaultsText")// 2、发送方,创建 userDefaults 同步数据NSUserDefaults.standardUserDefaults().synchronize()
Page6.swift
// 3、接收方,创建 userDefaults,并以相同的 key 值读取数据,接收传递值receiveLabel.text = NSUserDefaults.standardUserDefaults().objectForKey("userDefaultsText") as? String
4、代理传值
4.1 代理反向传值
代理 - 反向传值
1、创建代理协议,并在协议中创建协议方法
- 2、委托方:发送方,包含协议头文件
- 3、委托方:发送方,创建代理人属性变量
4、委托方:发送方,调用协议方法,发送传递值
- 5、代理方:接收方,遵守代理协议
- 6、代理方:接收方,实例化发送方对象,并设置其代理人为 self
7、代理方:接收方,实现代理协议中的方法,接收传递值
Objective-C
创建协议
PageDelegate1.h
#import <Foundation/Foundation.h>@protocol PageDelegate1 <NSObject>// 1、创建代理协议,并在协议中创建协议方法- (void)setLabelWithText:(NSString *)protocolText;@end
Page8.h
// 2、委托方:发送方,包含协议头文件#import "PageDelegate1.h"// 3、委托方:发送方,创建代理人属性变量@property(nonatomic, weak)id<PageDelegate1> delegate;
Page8.m
if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 4、委托方:发送方,调用协议方法,发送传递值[self.delegate setLabelWithText:sendTextFiled.text];}
Page7.m
// 5、代理方:接收方,遵守代理协议@interface Page7 () <PageDelegate1>// 6、代理方:接收方,实例化发送方对象,并设置其代理人为 selfPage8 *pvc8 = [[Page8 alloc] init];pvc8.delegate = self;// 7、代理方:接收方,实现代理协议中的方法,接收传递值- (void)setLabelWithText:(NSString *)protocolText {receiveLabel.text = protocolText;}
Swift
创建协议
PageDelegate1.swift
import Foundationprotocol PageDelegate1 {// 1、创建代理协议,并在协议中创建协议方法func setLabelWithText(protocolText:String?)}
Page8.swift
// 3、委托方:发送方,创建代理人属性变量var delegate:PageDelegate1!if self.delegate != nil {// 4、委托方:发送方,调用协议方法,发送传递值self.delegate.setLabelWithText(sendTextFiled.text)}
Page7.swift
// 5、代理方:接收方,遵守代理协议class Page7: UIViewController, PageDelegate1 {// 6、代理方:接收方,实例化发送方对象,并设置其代理人为 selflet pvc8 = Page8()pvc8.delegate = self// 7、代理方:接收方,实现代理协议中的方法,接收传递值func setLabelWithText(protocolText: String?) {receiveLabel.text = protocolText}
4.2 代理反向传值封装
代理 - 反向传值,代理封装
1、创建代理协议,并在协议中创建协议方法
- 2、委托方:发送方,包含协议头文件
- 3、委托方:发送方,创建代理人属性变量
- 4、委托方:发送方,声明重构的 init 初始化方法
- 5、委托方:发送方,重构 init 初始化方法
6、委托方:发送方,调用协议方法,发送传递值
- 7、代理方:接收方,遵守代理协议
- 8、代理方:接收方,用重构初始化方法实例化委托方对象,并设置其代理人为 self
9、代理方:接收方,实现代理协议中的方法,接收传递值
Objective-C
创建协议
PageDelegate2.h
#import <Foundation/Foundation.h>@protocol PageDelegate2 <NSObject>// 1、创建代理协议,并在协议中创建协议方法- (void)setLabelWithText:(NSString *)protocolText;@end
Page10.h
// 2、委托方:发送方,包含协议头文件#import "PageDelegate2.h"// 3、委托方:发送方,创建代理人属性变量@property(nonatomic, weak)id<PageDelegate2> delegate;// 4、委托方:发送方,声明重构的 init 初始化方法- (instancetype)initWithTarget:(id<PageDelegate2>) delegate;
Page10.m
// 重构的 init 初始化方法// 5、委托方:发送方,重构 init 初始化方法- (instancetype)initWithTarget:(id<PageDelegate2>)delegate {if (self = [super init]) {self.delegate = delegate;}return self;}if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 6、委托方:发送方,调用协议方法,发送传递值[self.delegate setLabelWithText:sendTextFiled.text];}
Page9.m
// 7、代理方:接收方,遵守代理协议@interface Page9 () <PageDelegate2>// 8、代理方:接收方,用重构初始化方法实例化委托方对象,并设置其代理人为 selfPage10 *pvc10 = [[Page10 alloc] initWithTarget:self];// 9、代理方:接收方,实现代理协议中的方法,接收传递值- (void)setLabelWithText:(NSString *)protocolText {receiveLabel.text = protocolText;}
Swift
创建协议
PageDelegate2.swift
import Foundationprotocol PageDelegate2 {// 1、创建代理协议,并在协议中创建协议方法func setLabelWithText(protocolText:String?)}
Page10.swift
// 3、委托方:发送方,创建代理人属性变量var delegate:PageDelegate2!// 重构的 init 初始化方法// 5、委托方:发送方,重构 init 初始化方法init(target delegate:PageDelegate2) {// 在 ViewController 中不能使用 super.init()super.init(nibName: nil, bundle: nil)self.delegate = delegate}if self.delegate != nil {// 6、委托方:发送方,调用协议方法,发送传递值self.delegate.setLabelWithText(sendTextFiled.text)}
Page9.swift
// 7、代理方:接收方,遵守代理协议class Page9: UIViewController, PageDelegate2 {// 8、代理方:接收方,实例化发送方对象,并设置其代理人为 selflet pvc10 = Page10(target: self)// 9、代理方:接收方,实现代理协议中的方法,接收传递值func setLabelWithText(protocolText: String?) {receiveLabel.text = protocolText}
4.3 代理双向传值
代理 - 双向传值
Objective-C
创建协议
PageDelegate3.h
#import <Foundation/Foundation.h>@protocol PageDelegate3 <NSObject>// 带返回值- (NSString *)setLabelWithText:(NSString *)protocolText;@end
Page16.h
#import "PageDelegate3.h"@property(nonatomic, weak)id<PageDelegate3> delegate;
Page16.m
- (void)viewDidLoad {if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 接收数据receiveLabel.text = [self.delegate setLabelWithText:nil];}}// 返回上一页- (void)sendClick {if ([self.delegate respondsToSelector:@selector(setLabelWithText:)]) {// 返回数据[self.delegate setLabelWithText:sendTextFiled.text];}[self dismissViewControllerAnimated:YES completion:nil];}
Page15.m
@interface Page15 () <PageDelegate3>Page16 *pvc16 = [[Page16 alloc] init];pvc16.delegate = self;- (NSString *)setLabelWithText:(NSString *)protocolText {// 接收返回的数据receiveLabel.text = protocolText;// 正向发送数据return sendTextFiled.text;}
5、Block/闭包 传值
5.1 block/闭包反向传值
block/闭包 - 反向传值
- 1、发送方:创建 block/闭包 类型的变量
2、发送方:调用 block/闭包,发送传递值
3、接收方:实例化发送方对象,并实现其 block/闭包,接收传递值
Objective-C
Page12.h
// 1、发送方:创建 block 类型的变量,变量名为 passDataBlock@property (nonatomic, copy)void (^passDataBlock)(NSString *);
Page12.m
if (self.passDataBlock) {// 2、发送方:调用 block,发送传递值 self.passDataBlock(sendTextFiled.text);}
Page11.m
// 3、接收方:实例化发送方对象,并实现其 block,接收传递值Page12 *pvc12 = [[Page12 alloc] init];pvc12.passDataBlock = ^(NSString *blockText){receiveLabel.text = blockText;};
Swift
Page12.swift
// 1、发送方:创建闭包类型的变量var passDataClosure:((String?) -> Void)!if self.passDataClosure != nil {// 2、发送方:调用闭包,发送传递值self.passDataClosure(sendTextFiled.text)}
Page11.swift
// 3、接收方:实例化发送方对象,并实现其闭包,接收传递值let pvc12 = Page12()pvc12.passDataClosure = { (closureText:String?) inself.receiveLabel.text = closureText}
5.2 block/闭包反向传值封装
block/闭包 - 反向传值,block/闭包 封装
- 1、发送方:创建 block/闭包 类型的变量
- 2、发送方:声明重构 init 初始化方法
- 3、发送方:重构 init 初始化方法
4、发送方:调用 block/闭包,发送传递值
5、接收方:用重构初始化方法实例化发送方对象,并实现其 block/闭包,接收传递值
Objective-C
Page14.h
typedef void (^pagePassDataBlock)(NSString *);// 1、发送方:创建 block 类型的变量,变量名为 passDataBlock@property (nonatomic, copy)pagePassDataBlock passDataBlock;// 2、发送方:声明重构 init 初始化方法- (instancetype)initWithBlock:(pagePassDataBlock)dataBlock;
Page14.m
// 重构 init 初始化方法// 3、发送方:重构 init 初始化方法- (instancetype)initWithBlock:(pagePassDataBlock)dataBlock {if (self = [super init]) {self.passDataBlock = dataBlock;}return self;}if (self.passDataBlock) {// 4、发送方:调用 block,发送传递值self.passDataBlock(sendTextFiled.text);}
Page13.m
// 5、接收方:用重构初始化方法实例化发送方对象,并实现其 block,接收传递值Page14 *pvc14 = [[Page14 alloc] initWithBlock:^(NSString *blockText) {receiveLabel.text = blockText;}];
Swift
Page14.swift
// 1、发送方:创建闭包类型的变量var passDataClosure:((String?) -> Void)!// 重构 init 初始化方法// 3、发送方:重构 init 初始化方法init(closure:((String?) -> Void)) {super.init(nibName: nil, bundle: nil)self.passDataClosure = closure}if self.passDataClosure != nil {// 4、发送方:调用闭包,发送传递值self.passDataClosure(sendTextFiled.text)}
Page13.swift
let pvc14 = Page14 { (closureText:String?) in// 5、接收方:用重构初始化方法实例化发送方对象,并实现其 block/闭包,接收传递值self.receiveLabel.text = closureText}
5.3 block/闭包双向传值
block/闭包 - 双向传值
Objective-C
Page18.h
// 带返回值@property (nonatomic, copy)NSString * (^passDataBlock)(NSString *);
Page18.m
- (void)viewDidLoad {[super viewDidLoad];if (self.passDataBlock) {// 接收数据receiveLabel.text = self.passDataBlock(nil);}}// 返回上一页- (void)sendClick {if (self.passDataBlock) {// 返回数据self.passDataBlock(sendTextFiled.text);}[self dismissViewControllerAnimated:YES completion:nil];}
Page17.m
Page18 *pvc18 = [[Page18 alloc] init];pvc18.passDataBlock = ^(NSString * blockText){// 接收返回的数据receiveLabel.text = blockText;// 正向发送数据return sendTextFiled.text;};
iOS - PassData相关推荐
- iOS - UIStoryboard
前言 NS_CLASS_AVAILABLE_IOS(5_0) @interface UIStoryboard : NSObject@available(iOS 5.0, *) public class ...
- ios开发 ajax hook,IOS中的网络拦截总结
因为业务场景需要,要求对App中网络请求进行拦截.这里包括原生网络请求和WebView里的网络请求.之前我们了解过原生网络请求的拦截是可以实现的,但是WebView中网络请求似乎还不太可能,所以抱着尝 ...
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总...
iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...
- iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook详解
代码改变世界 Posts - 69, Articles - 0, Comments - 812 Cnblogs Dashboard Login Home Contact Gallery RSS Ken ...
- iOS wallet开发
wallet的前身为passbook,2015年WWDC大会苹果正式改名wallet,passbook是苹果2012年iOS6开放出来的新功能.可以帮助用户管理五种类型(Boarding passes ...
- iOS Passbook 入门 1/2
步骤:(不完整) 1,生成pass.json的校验和: openssl sha1 pass.json 2,将生成的校验值置于manifest.json的pass.json的key-value下. 2, ...
- iOS 6 Passbook 入门 1/2
步骤:(不完整) 1,生成pass.json的校验和: openssl sha1 pass.json 2,将生成的校验值置于manifest.json的pass.json的key-value下. 2, ...
- iOS 6 Passbook 入门 2/2
原文地址:点击打开链接 这是 iOS 6 盛宴 的第二篇教程! 这篇教程是我们的新书 iOS 6 By Tutorials 中的一个缩略版本. Marin Todorov 是这个章节的作者 - 他也写 ...
最新文章
- 石锤!谷歌排名第一的编程语言,死磕这点,程序员都收益
- python使用选择结构鉴别合法日期
- Struts2-表单验证的两种方式
- 美团点评基于 Flink 的实时数仓平台实践
- java开关用法_如何在Java中使用带开关盒的枚举?
- JAVA Feign
- mybatis分页的一种解决方案
- Linux在多线程应用程序中处理信号
- 互联网的逻辑和电商的逻辑是不一样的
- 全文搜索引擎 Elasticsearch 入门(ik,kibana,x-pack)
- 大学mysql期末试题_大学期末考试综合实训试题一
- 什么是“元认知”?用具体的例子易懂地解说教育、商务中大受关注的能力!
- Db4o数据库:快速入门
- STM32F103ZET6【标准库函数开发】-----TM1638模块驱动4位8段共阴极数码管
- 如何高效绘制知识地图?
- java题目青蛙跳杯子_蓝桥杯 历届试题 青蛙跳杯子
- 微信公众帐号开发教程第8篇-QQ表情的发送与接收
- 【弄nèng - Zookeeper】Zookeeper入门教程(三)—— 客户端Curator的基本API使用(Curator framework)
- 洛谷P1425python题解
- think-swoole简易使用教程--websocket
热门文章
- checked js 获取值_js获取所有checkbox的值的简单实例
- pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
- vim 的tabnew带来的惊喜-建立多标签
- 函数 php_PHP回调函数及匿名函数概念与用法详解
- 【存储知识学习】第二章存走进计算机IO世界--《大话存储》阅读笔记
- 天翼云从业认证(4.2)网站建设实战
- 2020年1月份学习总结,死线(Deadline)杀死团队拖延症
- 笔记-信息系统开发基础-面向对象基本概念-对象和类
- windows下安装composer方法(不修改PATH环境变量)
- Android中读取NFC标签卡中的ID