IOS-block实现页面之间的传值

iOS开发:Block传值的运用 在iOS开发中传值是一个非常经典的方法,有六种传值方式:属性传值、代理传值、Block传值、方法传值、单例传值、通知传值。本章就来分享一下通过Block完成两个不同界面间的传值操作。 首先再来了解一下Block,简单一点说,Block就是一段匿名的代码块,是具有某种功能的代码块。那么接下来通过实际应用场景,来直观的演示一下用Block传值的操作,具体如下所示。 实例场景是在控制器A里面点击按钮... 阅读详情

利用Block实现两个页面之间的传值,假设有两个控制器control1 和control2,control1上有一个label和一个button,点击button跳转到control2,control2上有一个button和一个textField,点击control2上的button回到control1,并将textField上输入的文字显示在control1的label上:

//---------------------control2.h
#import <UIKit/UIKit.h>

typedef void(^ChangeTextBlock) (NSString *text);

@interface ModalViewController : UIViewController

//定义一个block
@property (nonatomic, copy) ChangeTextBlock block;

@end


//----------------------control2.m
- (void) backAction: (UIButton *) button {
    
    //1) 取值
    UITextField *textField = (UITextField *)[self.view viewWithTag:2000];
    
    //2) 修改值 -----》 调用block来修改值
    if (self.block != nil) {
        self.block(textField.text);
    }
    
    //3) 关闭模态视图
    [self dismissViewControllerAnimated:YES completion:nil];
 
}

//---------------------control1.m
- (void) buttonAction: (UIButton *) button {
    
    //1. 实现block,使用__weak的原因:是防止内存的泄露
    __weak Controller1 *control1 = self;
    
    //2. block的初始化
    _modalViewController.block = ^(NSString *text) {
        //如果不用__weak的对象,那么这里会提示一个警告 ------> 内存的
        UILabel *label = (UILabel *) [control1.view viewWithTag:1000];
        label.text = text;
    };
    
    //3. 弹窗模式
    _modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    //4. 模态视图
    [self presentViewController:_modalViewController animated:YES completion:nil];
    
}

这里我只把实现传值部分的代码附上,我们可以看到在control1的button实现的方法中,定义了一个用weak修饰的控制器control1指向自己,如果不用weak的对象,下面的block的实现会出现警告,提示内存泄漏:

Capturing self strongly in this block is likely to lead to retain cycle,retain cycle,简单来说就是甲引用乙,乙又引用甲,双方都在等对方释放,就形成了一个圈,出现内存错误。



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

相关推荐

ios-跨页面传值 block传值.zip

通过block传值

【iOS】—— Block传值

Block简介 将函数及其执行上下文封装起来的对象,block的调用实际就是函数的调用。 Block传值的步骤 步骤1:block 的声明 (视图二 .h 中) 返回值类型(^block 的名字)(参数列表); //自定义类型Block typedef void(^returnLabelValue)(NSString *label); //Block声明 @property (nonatomic, strong) returnLabelValue valueLabel; 步骤二:block 的

m0_55124878的博客 1019

iOS Block 界面传值

iOS Block 的 基本使用 演示 在Controller之间传值 和 传点击相应事件

【iOS】—— block传值

block传值和协议传值类似,都是从下一界面往上一界面传值,两者之间在用法上也有着很多相似之处。

m0_62386635的博客 541

iOS(闭包)block传值详解

主要介绍了iOS(闭包)block传值的相关知识以及代码分享,对此有兴趣的朋友可以学习下。

GPL vs MIT:独立开发者选择开源协议的法律与商业考量

你可能听过这样的故事:某个开发者用业余时间写了个超好用的工具库,开源后被某大厂悄悄集成到闭源产品里赚得盆满钵满,开发者却连杯奶茶钱都没拿到;也可能听说过另一个案例:开发者选了GPL协议,结果用户修改代码后必须开源,反而推动项目社区快速壮大,最终靠技术服务赚到了钱。这些故事的核心矛盾,都源于开源协议的选择。对于独立开发者(尤其是单枪匹马写代码的个人或小团队),开源协议不是“随便选一个就行”的小事——它是代码的“使用说明书”,更是保护自身权益、规划项目未来的关键工具。

AI天才研究院 1180

[iOS]-Block传值

Block简介 block 就是带有自动变量(就是局部变量)值的匿名函数。顾名思义就是带有自动变量(也就是局部变量)值的不带名称的函数。 Block传值 Block传值是类似于协议传值的反向传值,即都是从B界面传回A界面 Block传值的过程 先在B界面的.h文件中定义代码块和block属性 在A界面的.m文件中设置事件,从A界面跳转到B界面,并编写B界面的block将相应值传给A界面属性的代码 在B界面.m文件的触发传值的事件中将需要传的值做为block代码块的参数,并返回到A界面即可看到完成了bloc

m0_52192682的博客 460

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1047

ios Block传值

在 ios中 ,传值方式有 属性传值、自定义初始化构造函数传值,通知传值,代理传值,KVC传值,单例传值,block传值,下面来谈谈block传值; block传值有两种方式,第一种是把block当做一个属性来传值       第二种是把lock当做对象方法的参数来传值 block当做属性传值: 第一步,在需要传值的类的  .h文件中声明一个无返回值的block属性

ThisSummer__的博客 833

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7714

Figma到Axure一键转换:Axhub Extension保姆级教程(含常见问题解决)

本文提供Axhub Extension的保姆级教程,详细讲解如何将Figma设计稿一键转换为Axure高保真交互原型。教程涵盖环境准备、核心转换四步走流程,并重点解决JSON导入失败、样式错乱、复杂组件转换等常见问题,旨在打通Figma与Axure之间的数据孤岛,大幅提升设计师和产品经理的原型制作效率。

night的博客 1575

Block传值解析

在子页面向父页面传值的时候,可以用代理传值。同样也可以用block块传值。 演示1 在ViewController1中有一个UILabel和一个UIButton,UILabel用来显示从子页面传过来的值,UIButton用来打开子页面。 在ViewController2中我们写block定义: #import <UIKit/UIKit.h> typedef void ...

weixin_30821731的博客 167

YOLOv11与CLIP融合的零样本目标检测技术:原理、实现与创新实践

YOLO(You Only Look Once)系列作为单阶段检测器的代表,以其实时高效的特性在工业界获得广泛应用。YOLOv11作为该系列的最新演进,引入了多项架构创新: C3K2模块:采用双小卷积核替代传统大卷积核,在保持感受野的同时减少计算量。当参数c3k=False时退化为YOLOv8的C2F模块,提供灵活的精度-效率权衡。 C2PSA(Convolutional block with Parallel Spatial Attention):通过并行空间注意力机制增强对微小目标的特征提取能力,这对

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1068

iOS Block作为property属性实现页面之间传值

我们可以把Block当做Objective-C的匿名函数。Block允许开发者在两个对象之间将任意的语句当做数据进行传递,往往这要比引用定义在别处的函数直观。另外,block的实现具有封闭性(closure),而又能够很容易获取上下文的相关状态信息。定义Block变量,就相当于定义了一个函数。但是区别也很明显,因为函数肯定是在-viewDidLoad方法外面定义,而Block变量定义在了viewD

Jingchuanhe的博客 2368

5.2.4_标志位的生成

计算机组成原理之标志位的生成

人生得意须尽欢 7587

MFC Tab Control控件完全指南:从基础使用到高级定制

本文详细介绍了MFC中TabControl控件的使用方法和高级技巧。主要内容包括:1) TabControl基础属性设置与绑定;2) 样式定制和外观自定义;3) 创建派生类实现扩展功能;4) 动态页面管理和子对话框控制;5) 高级功能如标签拖拽排序和右键菜单。通过完整代码示例,展示了从基本应用到复杂场景的实现方案,包括多标签页管理、自定义绘制、动态添加/删除标签等核心功能,为MFC开发者提供了全面的TabControl开发指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 258

iOS - 页面之间传值的实现 - block

在OC中页面之间传值,从前往后传已经没有什么意义,在此,关键说明利用block从后向前传值的方法的实现。 为了方便说明,我们假设从 ViewController 跳转到 FirstViewController ,然后,把FirstViewController的值传到ViewController. 首先,在 ViewController.m 中: #import "ViewContro

Q_Q33757152的博客 376

TIA Portal (博图) -两台不同网段S7-1200通信(上)

因为不同网段意味着它们默认不在同一个广播域,并且没有网关设备来处理路由,所以标准的 TCP/IP 通信(如 `TSEND_C`/`TRCV_C`)无法直接建立连接。S7 通信 (PUT/GET): 最简单,配置好连接后,在客户端 PLC 使用 `PUT` 指令发送数据到服务器 PLC,使用 `GET` 指令从服务器 PLC 读取数据。* 在地址详细信息中,确保 本地连接端点是客户端 PLC 的接口,远程连接端点是服务器 PLC 的接口和 IP (`192.168.2.20`)。

电工 2680

iOS界面之间的传值

iOS实现页面间传值的方式: 通过设置属性,实现页面间传值 委托delegate方式 通知notification方式 block方式 UserDefaults或者文件方式 单例模式方式 使用SharedApplication,定义一个变量来传递 本篇教程中,有两个视图控制器,分别为ViewController和AnotherController,我们想把ViewController中UITextF

闪星的博客 898

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Blocks实现代理传值

一、RootViewController: #import "RootViewController.h" #import "SecondViewController.h" @interface RootViewController () { UILabel *_myLabel; } @end @implementation RootViewController - (id)in

Where's my API ? 1239

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UI整理-----part6--页面间的传值

1.使用block进行页面传值: (1)首先,block的本质是一个指向结构体的指针,我们可以把它当做Objective—C的一个匿名函数,block允许开发者在两个对象之间将任意的语句当做数据进行传值,block的实现具有封闭性(closure),而又能很容易获取上下文的相关信息。 (2) block的定义声明和调用(回调)在一个界面(界面A),block的实现在另一界面(界面B) ...

weixin_34033624的博客 100

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

个人之对于Block的初探究

Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值。Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没

sinat_16941981的博客 341

iOS五种页面传值方式

页面传值是很常用的一个东西,这里介绍比较常用的五种:属性传值,block传值,代理传值,单例传值,通知传值。 (一)属性传值  实践方案:第二个界面中的lable显示第一个界面textField中输入的文本 实践步骤: 首先我们建立一个RootViewControllers和一个DetailViewControllers(detail页面的label显示root页面textField输入的内

SuAdrenine的博客 2193

iOS页面间几种传值方式

iOS页面间几种传值方式 属性 代理 block 通知 单例 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式:第二个视图控制器如何获取第一个视图控制器的部分信息例如 :第二个界面中的lable显示第一个界面textField中的文本这就需要用到属性传值、block传值那么第一个视图控制器如何获的第二个视图控制器的部分信息例如:第一个界面中的lable显示第二个界面textFi

believehard的博客 3232

iOS 页面之间的传值方式

在iOS开发中,为了减少数据请求的次数和进行一些逻辑处理,常会在页面跳转的同时进行值得传递。常用的传值方式有:属性传值、通知传值、委托代理传值、Block传值、KVO传值。 在说传值之前,先来说一下页面的跳转。现有A、B两个页面,A页面有个跳转按钮,当点击按钮的时候执行push或者present操作,页面跳转到下一级页面B,这个跳转叫做正向跳转。当点击B页面中的返回按钮,页面返回到上一级页面A,

m0_37681833的博客 542
上一篇: iOS -键盘显示与隐藏
下一篇: ios--GCD实现单例模式
Vip密斯特韦
博客等级 码龄11年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值