前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mybatis入门
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
3510
mybatis入门
set map list 之间的关联关系
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
4650
set map list 之间的关联关系
one or more listener failed to start
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
6510
one or more listener failed to start
ajax 请求400 bad request的问题
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
1.6K0
(centos7) linux 修改主机名
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1.1K0
(centos7)安装和卸载软件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
8760
(centos)mongo安全认证配置
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
7060
idea插件&油猴插件推荐.md
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
5960
(centos7)jps 找不到命令
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
3.8K0
application.yml 配置失效 ,maven 配置失效,扫描不到配置?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
1.9K0
application.yml 配置失效 ,maven 配置失效,扫描不到配置?
google/Chrome浏览器如何查看保存在网页上的密码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1.9K0
google/Chrome浏览器如何查看保存在网页上的密码
将普通用户添加到sudo组
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
2.2K0
warning: LF will be replaced by CRLF in XXXXXX
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
6570
微信小程序跳坑之地图控件事件失效
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
5520
CentOS 7 Minimal 安装图形化界面
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
2.7K1
ajax和form提交上传文件表单
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
2.2K0
ajax和form提交上传文件表单
tp5之验证码不显示
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
1.1K0
tp5之验证码不显示
ajax模拟form表单同步方式下载文件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
1.8K0
关于H5+设置ios设备的状态栏背景的小问题
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1.2K0
关于H5+设置ios设备的状态栏背景的小问题
sublime text3 汉化
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
4160
相关推荐
mybatis入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文