谈谈ios传值方式(属性传值、代理传值、Block传值、单例传值、通知传值、KVC传值)

IOS 页面之间几种传值方式(单例,代理,kvc) IOS 页面之间几种传值方式(单例,代理,kvc) 分别实现用单例,代理,kvc 方式在页面之间的传值方式 立即下载

一下所有的演示由:AViewController 和 BViewController 完成简写(AVC和BVC)

所有传值合集github链接:https://github.com/TianYou899/valueset

1.属性传值(AVC代码传到BVC代码):

AVC 导入  BVC

BVC声明属性

//接收值
@property (nonatomic, copy) NSString * string;

BViewController * bVC = [[BViewController alloc]init];
    bVC.string = self.aTextField.text;
    [self.navigationController pushViewController:bVC animated:YES];

2.代理传值(BVC传到AVC):

BVC:

<span style="font-size:12px;">//定义代理
@protocol delegateCZ <NSObject>

// 代理方法
- (void)transferString:(NSString *)string;

@end

@interface BViewController : UIViewController

// 代理属性
@property (nonatomic, weak) id<delegateCZ> delegate;</span>
<span style="font-size:12px;"></span><pre name="code" class="objc"> // 判断有没用遵循代理 有就执行
    if (self.delegate && [self.delegate conformsToProtocol:@protocol(delegateCZ)]) {
        [self.delegate transferString:self.bTextField.text];
    }
    
    [self.navigationController popToRootViewControllerAnimated:YES];



AVC
@interface AViewController ()<delegateCZ>
BViewController * bVC = [[BViewController alloc]init];
    // 遵循代理
    bVC.delegate = self;

// 从 B 从到A
// 执行代理方法
- (void)transferString:(NSString *)string {
    
    self.aTextField.text = string;
}
3.Block传值(BVC传到AVC):

BVC

// 定义一个block
typedef void (^blockCZ)(NSString * string);

@interface BViewController : UIViewController

// block 属性
@property (nonatomic,copy) blockCZ  block;
/**
     
     Blcok 传值 B传到A
     注意:因为A页面堆过来的时候已经初始化了B 所有不能从A传到B(这种情况下硬传的话 会造成循环引用)
     */
    _block(self.bTextField.text);
    [self.navigationController popToRootViewControllerAnimated:YES];

AVC

BViewController * bVC = [[BViewController alloc]init];
    [bVC setBlock:^(NSString * string){
        self.aTextField.text = string;
    }];
    
    [self.navigationController pushViewController:bVC animated:YES];

4.单例传值(AVC传到BVC)

声明单例类.h

@interface DanLi : NSObject

@property (atomic, copy) NSString *value;

+ (DanLi *)sharedDanLi;

@end
声明单例类.m
<pre name="code" class="objc">#import "DanLi.h"

static DanLi *danli = nil;

@implementation DanLi

//实现方法,判断是否为空,是就创建一个全局实例给它
+ (DanLi *)sharedDanLi {
    
    if (danli == nil) {
        danli = [[DanLi alloc] init];
    }
    return danli;
}
//避免alloc/new创建新的实例变量
+ (id)allocWithZone:(struct _NSZone *)zone {
    
    @synchronized(self) {
        if (danli == nil) {
            danli = [super allocWithZone:zone];
        }
    }
    return danli;
}
//避免copy,需要实现NSCopying协议
- (id)copyWithZone:(NSZone *)zone {
    return self;
}

@end



5.通知传值(BVC传到AVC)

AVC

// 接收通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tzAction:) name:@"tz" object:nil];
// 回调通知
- (void)tzAction:(NSNotification *)sender {
    
    self.aTextField.text = sender.userInfo[@"key"];
}

BVC

[[NSNotificationCenter defaultCenter] postNotificationName:@"tz" object:nil userInfo:@{@"key":self.bTextField.text}];
    
    [self.navigationController popToRootViewControllerAnimated:YES];

6.KVC传值(AVC传到BVC)

AVC

BViewController * bVC = [[BViewController alloc]init];
    
    //KVC 传值:这里只能传A传到B (因为 B在A页面提前初始化)
    //这里forkey 一定要和B 属性名字一致 (也可以用@"_string")因为是属性
    // 给B属性string  赋值
    [bVC setValue:self.aTextField.text forKey:@"string"];
    
    [self.navigationController pushViewController:bVC animated:YES];
BVC

//接收值
@property (nonatomic, copy) NSString * string;
// KVC 接收值
    self.bTextField.text = self.string;


所有传值合集github链接:https://github.com/TianYou899/valueset




iOS 传值方法(属性传值、代理传值、Block、通知、单例) 立即下载

相关推荐

iOS单例传值

iOS单例传值。。。从第一个view输入你的数据。。在第二个view上显示你的数据

iOS的五大传值

在进入下一个界面时,下一个界面的viewDidLoad还没有加载,我们可以在后一个界面设置一个接受前一个界面传过来的值的属性,传过来的值也是前一个页面的属性。适用场景:已经通过push的方式进入到子页面,在从子页面返回主页面的时候(子页面会释放掉内存),需要在主页面中使用子页面中的数据,这是就可以利用代理反向传值。协议传值是将值从后面的以页面传到前面的页面,当我们返回前面的页面,此时前面的页面已经加载过一次,不会重新加载,此时就要用到协议传值。属性传值是一种将值从前面的页面传到后面的页面的传值方式。

m0_73974056的博客 354

ios 界面传值方式 属性传值 和 单列传值实现纯代码

最简单的实现带你完全理解界面传值的2种方式,属性传值和单例传值,至于其它传值方式,请留意更新。

IOS——多界面传值

如果现在要从B向A传值,我们首先应该在B的接口部分声明一个Block属性,然后在由B跳转回A的位置将需要传递的值放入该属性的参数部分,最后在A跳转到B的位置调用B页面的Block属性,并在Block块中完成相应的操作。然后在从B视图跳转到A视图的地方设定好代理 delegate的对象执行协议方法,最后在接收值的A界面遵循协议并且在A跳转到B的地方将B的代理者属性设定为A视图控制器,最后实现相应的协议方法即可。发送通知,然后在A界面注册通知,也就是接收通知,最后在A界面实现通知中的方法即可。

m0_73348697的博客 576

代理传值 简单实现

这是UITextField 和 UILable之间的简单传值

别再只会用555了!手把手教你用运放和RC电路搭一个50Hz正弦波信号源(附Multisim仿真文件)

本文详细介绍了如何使用运放LM358和RC电路搭建一个精准的50Hz正弦波信号源,涵盖文氏电桥核心原理、单电源供电解决方案、Multisim仿真及实物调试技巧。通过实战指南和优化建议,帮助电子爱好者快速掌握低频信号生成技术,适用于各种测试和校准场景。

weixin_34116482的博客 363

【iOS】属性传值、代理传值(委托)、通知传值、KVO传值、Block传值、单例传值

在开发中经常需要不同页面间进行信息传递,经过了解,页面间传值有八大传值方式,本篇文章中我们就了解并比较比较常用的几种传值方式(五大传值、单例传值) 运行结果图示放在每个传值方法的结尾! 本篇文章详细地介绍了开发过程中常用的页面传值方式! 😶‍🌫️

XY_Mckevince的博客 593

Centos7安装Tesseract5.5.0+SpringBoot集成部署(离线版)

Java 中实现 OCR(光学字符识别)功能,可以使用 Tesseract OCR,这是一个开源的 OCR 引擎,支持多种语言,并且可以在 Java 中通过 Tesseract API 进行集成。

Leopard锋的博客 2320

iOS 多面传值之 -- 单例传值

单例传值 单例可以保证其某个类的实例在程序中是唯一的,便于进行资源和数据的共享 单例传值可以理解为定义一个全局静态变量进行传值,将第二个页面的内容传入第一个页面并显示。 3.新建一个Person类#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic,strong) NSString *str

qq_34478149的博客 404

SAP-PP MD04详解一

MD04是SAP运行MRP后的结果查询事务码,其他功能强大,标准功能比如:查询/更改物料主数据、转换计划订单到生产订单/采购申请、查询/更改各个MRP元素对应的单据等等。而且还可以附加标准的菜单或者自定义添加事务码上去。老铁将做一个MD04详细说明系列,本篇为第一篇之MRP元素说明。 我们来看看MD04基本界面 可以看到主要的数据显示界面,有日期、MRP元素、MRP元素数据、再计划日期、收货/需求、可用数量、工厂、库存地点等栏位。光标定位到MRP元素列,按F1即可看到各类MRP元素的说...

weixin_52158549的博客 1万+

COMSOL两相流(相场法)

COMSOL是一款功能非常强大的多物理场仿真软件,拥有可视化和后处理工具,可方便有效的展示您的仿真效果,具有灵活、高效、友好的特点,软件能够为用户提供各类工程问题的解决方案,从而帮助广大研究和工程人员能够在科研上取得新突破。 COMSOL可以实现声学、传热、流体力学、结构力学等方面的模拟仿真,具体模块如下图所示。 COMSOL软件设置流程 定义需要求解的问题类型:针对一个需要仿真的问题,需要先对问题进行分析;分析该问题用到哪些物理场,什么样的几何模型,以及如何设置研究等。该步骤可以使用COMSOL中的

weixin_47139559的博客 1万+

iOS传值中的单例模式、代理模式

文章目录什么是单例模式类的创建锁的比较dispatch_once指针置nil正确的写法代理模式使用步骤协议在何处定义weak作用 什么是单例模式 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 类的创建 .m文件 static KeepFreshManage *manageCustom; @implementation KeepFreshManage (instancetype) sharedL

wtl1804的博客 473

西门子1200之PID用法与控制

西门子PID加热试验

gyxgyx789的博客 6250

OC-代理、block、通知、kvc使用

版权声明:本文为延成原创文章,转载请标明出处 代理反向传值 //在VCPassByValue2.h文件中定义 //定义代理协议 @protocol VCPassByValue2Delegate <NSObject> //定义一个协议函数 -(void)sendMessage:(NSString*)message; @end @interface VCPassByValue2 : UIViewController //定义一个代理对象 来实现协议函数,达到代理对象改变本身属性的目的 @pro.

延成的博客 338

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 359

欧姆龙PMAC CK3M控制器新手避坑指南:从开箱到EtherCAT总线配置的完整流程

本文详细介绍了欧姆龙PMAC CK3M控制器的完整配置流程,从开箱检查到EtherCAT总线配置,特别针对新手常见问题提供避坑指南。内容包括硬件连接、软件安装、EtherCAT主站初始化、从站配置、电机参数设置等关键步骤,帮助工程师快速掌握PMAC控制器的使用技巧。

weixin_42532938的博客 387

【iOS】单例、通知、代理

单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个洁面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存的存储空间(即单例类保证了该类的实例对象是唯一存在的一个)KVO/通知 -------> 观察者模式KVC --------> KVC模式单例模式代理模式1. 代理和通知的区别效率:代理比通知高;delegate是强关联,委托和代理双方互相知道。

zdsey的博客 1006

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 957

iOS学习——页面的传值方式

一、简述   在iOS开发过程中,页面跳转时在页面之间进行数据传递是很常见的事情,我们称这个过程为页面传值。页面跳转过程中,从主页面跳转到子页面的数据传递称之为正向传值;反之,从子页面返回主页面时的数据传递称之为反向传值。   目前我所了解和掌握的传值方式有: 属性传值 单例传值 NSUserDefaults传值 代理传值 block传值 通知传值 KVO/KVC...

weixin_30432179的博客 189

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

界面传值的方式

iOS传值的方式 属性传值(正向传值) 方法传值(正向传值) 代理传值 block属性传值(反向传值) block方法传值(反向传值) KVO(反向传值) KVC(正向传值) 通知notification 单例模式方式 UserDefault或者文件方式 代码示例图: 代码详情 VCPassByValue.h #import <UIKit/UIKit.h> N...

延成的博客 409

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS 页面间几种传值方式(属性,代理,block,单例,通知

iOS 页面间几种传值方式属性(KVC,KVO),代理(delegate),block,单例,通知(NSNotification)**应用场景:**第二个视图控制器如何获取第一个视图控制的信息 eg:第二个界面中的lable显示第一个界面的textField中的文本这就需要用到属性(kvc,kvo)传值,Block传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: 属性传

ChinHan的博客 1054

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS UIViewController之间的传值方式之一:委托代理

iOS开发中经常需要在2个控制器之间传递数值,例如:aViewController上有一个label标签,bViewController有一个TextField等待用户输入,并且将用户输入的内容显示到aViewController中的label上,这中情况就是控制器之间的数值传递了,或者说数据通信。 实现的方式有很多种,本人主要实验了四种,一是delegate委托代理模式,二是notificat

gongqiuwei08的专栏 1719

iOS 之 (闭包)block传值

在iOSAPP开发的过程中 我们会用到很多需要传值的地方 传值的方式也多种多样 有:代理传值、通知传值、KVC、KVO、block、单例 等。其中block 因为其简洁实用规范的代码 无疑是大牛们传值的不二选择 但对于初学者来说要理解并能运用 起初确实有些难以理解 以下我将细细的介绍下block  首先我总结了一下block的公式: 步骤 1.block 的声明   返回值类型(^b

phyone_的博客 627

iOS开发之 各种传值总结

一、自定义构造函数和属性传值 1、首先在需要值的类中自定义构造函数并在.h文件中声明 //自定义构造函数传值 //.m文件中 - (instancetype)initWithList:(NSArray *)list{     if (self = [super init]) {         myList = list; }     return self; } //.h文件

ltj1171528192的博客 648

【iOS】—— 常用的传值方式的比较

一.常用的传值方式 1.KVO传值 KVO全称Key Value Observing,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。由于KVO的实现机制,只针对属性才会发生作用,一般继承自NSObject的对象都默认支持KVO。 KVO可以监听单个属性的变化,也可以监听集合对象的变化。通过KVC的mutableArrayValueForKey:等方法获得代理对象,当代理对象的内部对象发生改变时,会回调KVO监听的方法。集合对象包含NSArray和NSSet。

m0_55124878的博客 257

ios 给网页传值_IOS常用的页面传值方式

IOS项目开发中,经常需要在不同的控制器之间跳转时进行传值操作,传值方式按传递的方向分为正向传值和逆向传值,正向传值比较好理解,就比如A控制器Push跳转至B控制器时,在A控制器中获取到B控制器的实例化对象,对B控制器的属性进行赋值,当控制器完成跳转后,就完成了值的传递。而逆向传值是B控制器Pop到A控制器时,对A控制器的某个属性进行赋值,虽然在B控制器中可以获取到A控制器的实例化对象,但是不能像...

weixin_33362939的博客 198
上一篇: 谈 UIView Animation 编程艺术
下一篇: ios 数组最大值,最小值,平均值,和的快速算法
TY_IOS
博客等级 码龄11年 16粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值