Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS开发:Block传值的运用

iOS开发:Block传值的运用

原创
作者头像
三掌柜
发布于 2021-12-02 08:51:42
发布于 2021-12-02 08:51:42
88200
代码可运行
举报
运行总次数:0
代码可运行

前言

iOS开发中传值是一个非常经典的方法,有六种传值方式:属性传值、代理传值、Block传值、方法传值、单例传值、通知传值。本章就来分享一下通过Block完成两个不同界面间的传值操作。

首先再来了解一下Block,简单一点说,Block就是一段匿名的代码块,是具有某种功能的代码块。那么接下来通过实际应用场景,来直观的演示一下用Block传值的操作,具体如下所示。

实例场景是在控制器A里面点击按钮进入到控制器B中,控制器B里面是一个单元格界面,每一个列表对应的三个参数,需要选中其中想要的列表然后返回并传值到控制器A里面,这就是整个使用场景的描述,接下来是具体实现的代码步骤。

1、控制器A.m文件

控制器A里面按钮点击事件的写法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)popoutBtnClick {
//跳转到控制器B
TeaMineBluetoothController *histoyVC = [TeaMineBluetoothController new];
            [self.navigationController pushViewController:histoyVC animated:YES];
            histoyVC.Complate = ^(NSString *temp, NSString *time, NSString *water) {
//Block传的三个参数给控制器A赋值的地方
                _centigradeDegree = [temp floatValue];
                _timeDegree = [time floatValue];
                _waterDegree = [water floatValue];
            };
}

2、控制器B.h文件

控制器B.h文件里面,需要声明Block函数,需要传三个参数值,具体如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "BaseViewController.h"
@interface TeaMineBluetoothController : BaseViewController
@property (nonatomic, copy) void(^Complate)(NSString *temp, NSString *time, NSString *water);
@end

3、控制器B.m文件

控制器B.m文件里面,主要是在单元格的点击事件里面给Block里面的参数赋值,具体步骤如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if (_selectedIndexPath && _selectedIndexPath.row == indexPath.row) {
        _selectedIndexPath = nil; // 点击了已经选中的列表项 , 取消选中
    }else {
        _selectedIndexPath = indexPath;
        NSDictionary *dic = _dateSource[indexPath.row];
        NSString *tempValue = dic[@"Temp"];
        NSString *timeValue = dic[@"Time"];
        NSString *waterValue = dic[@"Water"];
        NSString *title = NSLocalizedString(@"Title", nil);
        NSString *bluetooth = NSLocalizedString(@"Choose Success!", nil);
        NSString *confirm = NSLocalizedString(@"Confirm", nil);
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:title                                                                     message:bluetooth preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:confirm style:UIAlertActionStyleDefault
                                                             handler:^(UIAlertAction * action) {
                                                                //Block的赋值地方
                                                                 if (_Complate) {
                                                                     _Complate(tempValue, timeValue, waterValue); //直接给Block里面的三个参数赋值
                                                                 }
                                                                 [self.navigationController popViewControllerAnimated:YES];
                                                             }];
        [alert addAction:cancelAction];
        [self presentViewController:alert animated:YES completion:nil];
        [self.tableView reloadData]; // 数据加载完成之后刷新tableview
    }
}

这就是通过Block进行的一个简单传值操作。

最后

以上就是本章的全部内容,欢迎关注三掌柜的微信公众号“程序猿by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS开发:实现点击常用控件弹出地区选择框(万能方法)
随后还会分享实现点击UITextField弹出UIDatePicker日期选择器的博文,本篇博文只分享点击控件弹出选择框的方法实现(点击UIButton或者UILabel弹出选择提示框)。
三掌柜
2021/12/15
1.7K0
IOS开发之新浪围脖
  IOS开发和Web开发一样,网络请求方式包括Get和Post方式。Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据。下面还会提到如何在我们的项目中使用CocoaPods, CocoaPods的安装和使用教程请参考链接http://code4app.com/article/cocoapods-install-usage。上面详细的介绍了CocoaPods的安装过程和如何通过CocoaPods引入第三方类库。在本篇博客中提到CocoaPods,是因为
lizelu
2018/01/11
1.3K0
IOS开发之新浪围脖
iOS AFNetworking封装的网络请求
1.1 可以降低网络请求方法与Controller(控制器)的耦合度,即使网络使用的第三方框架发生不兼容、错误等问题从而想换框架时,也不用到每个控制器里面改代码(50、60页面会改到想哭)。 1.2 建立独立的工具类,方便管理。 1.3 优化代码结构。
网罗开发
2021/01/29
1.6K0
在线教育平台开发中,教学白板是如何实现的
教学白板是在线教育平台中不可缺少的功能,它的作用就如线下教室的黑板,讲师通过它进行板书、课件展示等操作。下面小编以iOS版本的在线教育平台开发为例,来说明白板功能是如何实现和调用的。
万岳教育系统
2020/06/04
1K0
在线教育平台开发中,教学白板是如何实现的
iOS学习——UIAlertController详解
  在开发中,弹出提示框是必不可少的。这两天项目中统一对已经被iOS API废弃的UIAlertView和UIActionSheet进行替换,我们知道,UIAlertView和UIActionSheet都已经被iOS的API所废弃了。在两者的API中都建议用UIAlertController替代,并通过设置不同的类型风格来选择是原先的UIAlertView或UIActionSheet的形式。   之前项目中一直用的都是原先的UIAlertView和UIActionSheet风格,所以对UIAlertCont
mukekeheart
2018/03/01
3.5K0
iOS学习——UIAlertController详解
iOS开发之表视图爱上CoreData
  在接触到CoreData时,感觉就是苹果封装的一个ORM。CoreData负责在Model的实体和sqllite建立关联,数据模型的实体类就相当于Java中的JavaBean, 而CoreData的功能和JavaEE中的Hibernate的功能类似,最基本是两者都有通过对实体的操作来实现对数据库的CURD操作。CoreData中的上下文(managedObjectContext)就相当于Hibernate中的session对象, CoreData中的save操作就和Hibernate中的commit,还
lizelu
2018/01/11
2.2K0
iOS开发之表视图爱上CoreData
iOS开发之诱导用户为自己的App评论功能
allluckly.cn.jpg "由于我自己的App下载量少,评论也少,出于App的aso优化,想尽办法,而评论是aso里边比较重视的一块,前面的版本都没有诱导用户评论的这一功能,导致有些被动。" 由此自己简单的封装了该功能,下面我们先看看效果图: 1.png 弹出试图并没有做什么处理,就是系统的8.0以前用的UIAlertView8.0以上用的UIAlertController 具体的一些算法,都可以看代码,闲话不多说,直接贴码, 新建一个NSObject的类命名为LBToAppStore 具
Bison
2018/07/04
1K0
iOS开发之利用Block逆向传值
在iOS开发之通过代理逆向传值一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,相比较代理,我个人认为反而要简单些,但是需要处理好细节问题,如Block循环引用。还是用前文的案例,本次使用Block来实现,Block的基本知识本文不再赘述。 一、书写规范 Block传值,需要注意的是,谁传值就需要定义Block,捕获方仅仅需要传递Block给传值方,并处理捕获的值。 传值方 1、定义Block用于传值 2、声明一个上述Block属性,这个属性的具体实现需要捕获方传进来
YungFan
2018/05/03
8300
iOS开发之利用Block逆向传值
iOS开发之微信聊天页面实现
  在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写。在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦。在聊天页面用到了三对,六种Cell,不过cell的复杂度要比之前的新浪微博(IOS开发之新浪围脖)简单的多。废话少说吧,还是先来几张效果图,在给出实现代码吧。   聊天界面的效果图如下:在下面的聊天界面中中用到了3类
lizelu
2018/01/11
4.2K0
iOS开发之微信聊天页面实现
六天完成一个简单iOS App - 第四天
第四天任务: 今天主要任务完成精华模块的搭建。 精华页面的搭建 精华页面中全部界面的显示 日期的处理 热门评论的显示和处理 精华页面的搭建 精华页面分为全部、视频、声音、图片、段子五个界面,五个界面可
xx_Cc
2018/05/10
1.4K0
iOS-NSArray与Model模型
一·应用场景 在日常开发中写页面UI,必定离不开与后端的数据JSON交互 1.如何快速写一个UITableView Step1:UITableView懒加载 - (UITableView *)tableView { if(!_tableView){//alloc init 初始化一个TableView} } Step2.继承Delegate&DataSource 这里举几个重要的必须实现的协议方法 - (void)didSelectRowAtIndexPath { //这里实现c
Wilbur-L
2021/08/13
6790
iOS开发之UITableView联动实现城市选择器
在 iOS开发之城市选择器一文中用两列的UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动在很多地方用得上,而且方法有好几种,我这里选择了个人喜欢的一种方式:弄两个UITableView,让当前控制器管理。这种方式总体思路如下: 1、添加两个UITableView到当前控制器中,分别设置它们的的尺寸,然后拖线到控制器中 2、左边的表格设置数据源和代理为当前控制器,然后显示数据,右边的表格也设置数据源为当前控制器,然后显示数据操作。 3、监听左边表格控制器
YungFan
2018/05/03
2.2K0
iOS开发之UITableView联动实现城市选择器
iOS开发-UITableViewCell的创建方式
被static修饰的成员变量,全局只有一份内存 static的后面只可以放一个定值,这是在编译阶段就确定的
孙寅
2020/06/02
1.3K0
iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案
场景: 在一个VC中,为一个UICollectionViewCell中的图片添加长按图片保存的事件。 长按保存图片 前提:infoPlist中添加相应权限:Privacy - Photo Libr
陈满iOS
2018/09/10
1.8K0
iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案
iOS开发之新浪微博山寨版代码优化
  之前发表过一篇博客“IOS开发之新浪围脖”,在编写代码的时候太偏重功能的实现了,写完基本功能后看着代码有些别扭,特别是用到的四种cell的类,重复代码有点多,所以今天花点时间把代码重构一下。为了减少代码的重复编写把cell中相同的部分抽象成父类,然后继承。不过也是结合着storyboard做的。在优化时转发的View和评论的View相似,于是就做了个重用。在原来的代码上就把cell的代码进行了重写,所以本篇作为补充,关键代码还得看之前的博客。   1.第一种cell,只有微博内容,没有图片,效果如下:
lizelu
2018/01/11
7430
iOS开发之新浪微博山寨版代码优化
写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景
本文讲述了一个典型的列表-详情模型的MVC实现,包括其基本架构、代码实现和注意事项。通过这个实例,展示了如何利用MVC设计模式优化代码结构和提高代码可维护性。同时,也探讨了如何在技术社区中更好地协作和共享知识。
ios122
2018/01/02
1.9K0
写给iOS小白的MVVM教程(一): 从MVC到MVVM之一个典型的MVC应用场景
iOS开发——Block在实际项目中的传值
在iOS开发中,我们会在实际过程中大量使用Block,其中Block有个很基础的功能,就是完成两个页面间的传值。而今天,我就用实际的项目中的页面,来展示如何完成两个页面间的传值。
Originalee
2018/08/30
1K0
iOS开发:NSSet的使用
集合和数组的相同点:都是存储不同元素的地址,不同点:NSSet中的元素都是被自动过滤之后的不会重复的元素,NSArray中的元素却是允许重复的;NSSet是一个无顺序的集合,NSArray是一个有顺序的集合。相对来说,NSSet的处理效率比NSArray的要快。
三掌柜
2021/11/25
1.7K3
iOS开发:NSSet的使用
iOS开发之通过代理逆向传值
在iOS开发中,传值是几乎每个App都会用到的,对于传统的顺向传值应该说是比较简单的,但是逆向传值往往会用到代理模式来实现,很多同学在这一块有迷惑,迷惑的不是怎么逆向传值,而是不理解代理模式,下面就来分析一下,如何理解和快速上手代理模式,并以一个简单的逆向传值为案例,看看代理模式是不是很难。 一、代理模式中的几个概念 讲代理模式之前,首先需要弄清楚两个概念:被代理对象和代理对象。并且需要知道它们之间是靠协议关连起来的。 1、被代理对象 被代理对象往往就是真正有做事意图的那个对象,比如卖房子案例中的想卖房子的
YungFan
2018/05/03
7470
iOS开发之通过代理逆向传值
iOS开发实战-上架AppStore 通过内购和广告获得收益写在前面效果分析代码部分补充Demo地址
忽然发现手头上也没什么独立App,那就随便写个放到AppStore上吧,凑个数吧。哈哈哈。
gwk_iOS
2018/08/23
1.3K0
iOS开发实战-上架AppStore 通过内购和广告获得收益写在前面效果分析代码部分补充Demo地址
推荐阅读
相关推荐
iOS开发:实现点击常用控件弹出地区选择框(万能方法)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文