前言

  • 页面传值:

    • 复合传值

    • 单例传值
    • 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相关推荐

  1. iOS - UIStoryboard

    前言 NS_CLASS_AVAILABLE_IOS(5_0) @interface UIStoryboard : NSObject@available(iOS 5.0, *) public class ...

  2. ios开发 ajax hook,IOS中的网络拦截总结

    因为业务场景需要,要求对App中网络请求进行拦截.这里包括原生网络请求和WebView里的网络请求.之前我们了解过原生网络请求的拦截是可以实现的,但是WebView中网络请求似乎还不太可能,所以抱着尝 ...

  3. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总...

    iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...

  4. iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: ...

  5. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook详解

    代码改变世界 Posts - 69, Articles - 0, Comments - 812 Cnblogs Dashboard Login Home Contact Gallery RSS Ken ...

  6. iOS wallet开发

    wallet的前身为passbook,2015年WWDC大会苹果正式改名wallet,passbook是苹果2012年iOS6开放出来的新功能.可以帮助用户管理五种类型(Boarding passes ...

  7. iOS Passbook 入门 1/2

    步骤:(不完整) 1,生成pass.json的校验和: openssl sha1 pass.json 2,将生成的校验值置于manifest.json的pass.json的key-value下. 2, ...

  8. iOS 6 Passbook 入门 1/2

    步骤:(不完整) 1,生成pass.json的校验和: openssl sha1 pass.json 2,将生成的校验值置于manifest.json的pass.json的key-value下. 2, ...

  9. iOS 6 Passbook 入门 2/2

    原文地址:点击打开链接 这是 iOS 6 盛宴 的第二篇教程! 这篇教程是我们的新书 iOS 6 By Tutorials 中的一个缩略版本. Marin Todorov 是这个章节的作者 - 他也写 ...

最新文章

  1. 石锤!谷歌排名第一的编程语言,死磕这点,程序员都收益
  2. python使用选择结构鉴别合法日期
  3. Struts2-表单验证的两种方式
  4. 美团点评基于 Flink 的实时数仓平台实践
  5. java开关用法_如何在Java中使用带开关盒的枚举?
  6. JAVA Feign
  7. mybatis分页的一种解决方案
  8. Linux在多线程应用程序中处理信号
  9. 互联网的逻辑和电商的逻辑是不一样的
  10. 全文搜索引擎 Elasticsearch 入门(ik,kibana,x-pack)
  11. 大学mysql期末试题_大学期末考试综合实训试题一
  12. 什么是“元认知”?用具体的例子易懂地解说教育、商务中大受关注的能力!
  13. Db4o数据库:快速入门
  14. STM32F103ZET6【标准库函数开发】-----TM1638模块驱动4位8段共阴极数码管
  15. 如何高效绘制知识地图?
  16. java题目青蛙跳杯子_蓝桥杯 历届试题 青蛙跳杯子
  17. 微信公众帐号开发教程第8篇-QQ表情的发送与接收
  18. 【弄nèng - Zookeeper】Zookeeper入门教程(三)—— 客户端Curator的基本API使用(Curator framework)
  19. 洛谷P1425python题解
  20. think-swoole简易使用教程--websocket

热门文章

  1. checked js 获取值_js获取所有checkbox的值的简单实例
  2. pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
  3. vim 的tabnew带来的惊喜-建立多标签
  4. 函数 php_PHP回调函数及匿名函数概念与用法详解
  5. 【存储知识学习】第二章存走进计算机IO世界--《大话存储》阅读笔记
  6. 天翼云从业认证(4.2)网站建设实战
  7. 2020年1月份学习总结,死线(Deadline)杀死团队拖延症
  8. 笔记-信息系统开发基础-面向对象基本概念-对象和类
  9. windows下安装composer方法(不修改PATH环境变量)
  10. Android中读取NFC标签卡中的ID