前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发——Block在实际项目中的传值

iOS开发——Block在实际项目中的传值

作者头像
Originalee
发布2018-08-30 10:37:01
1K0
发布2018-08-30 10:37:01
举报
文章被收录于专栏:编程之旅编程之旅

在iOS开发中,我们会在实际过程中大量使用Block,其中Block有个很基础的功能,就是完成两个页面间的传值。而今天,我就用实际的项目中的页面,来展示如何完成两个页面间的传值。

首先我们先来看,这个界面中,我们需要传递什么值。我们需要在点击选择房间之后,跳转到房间列表界面,在UITableViewController中,选择房间名,之后按下确定按钮后,跳转回第一个界面,使我们选择的房间名,显示在房间选项处。

房间列表界面

因为事件其实是发生在第二个界面,按下确定按钮时,所以我们在第二个界面,声明并定义Block。

代码语言:javascript
复制
typedef void(^SelectedRoomBlock)(NSString *roomName);

@interface SelectRoomTypeVC : UIViewController

@property (nonatomic, copy) SelectedRoomBlock selectedRoomBlock;

- (void)returnRoomName:(SelectedRoomBlock)block;
  • 我们先用typedef声明一个叫SelectedRoomBlockBlock,它需要有一个类型为NSString的参数。
  • 之后我们声明一个类型为SelectedRoomBlock的变量selectedRoomBlok
  • 我们定义一个函数,需要传入一个Block类型的参数,这个方法不用也可以,目的是为了减少代码量,使我们使用Block的过程更加清晰。

接下来我们就要开始来使用Block传值了,我们先来实现刚刚定义的函数方法。

代码语言:javascript
复制
- (void)returnRoomName:(SelectedRoomBlock)block{
    self.selectedRoomBlock = block;
}

很清晰的实现,就是为了再后来调用时,出现一个Block代码块,更加清晰。

把传进来的Block语句块保存到本类的实例变量selectedRoomBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当确认按钮按下时。

之后声明一个字符串类型的变量,保存我们刚刚存储的房间的值。

代码语言:javascript
复制
@property (nonatomic, copy) NSString *selectedRoomStr;

而获取值在UITableView的代理方法中实现,这里就不赘述了。

因为我们按下确定按钮开始传值,所以我们在ButtonAction中来实现。

代码语言:javascript
复制
-  (void)ButtonAction:(UIBarButtonItem *)sender{
    switch (sender.tag) {
        case 107:{
            if (self.selectedRoomBlock != nil) {
                self.selectedRoomBlock(self.selectedRoom);
            }
            [self.navigationController popViewControllerAnimated:YES];
            break;
        }
        
        default:
            break;
    }
}

第一个视图界面

我们回到第一个视图界面,在Push出第二个界面时生成第二个界面的地方,调用我们的Block属性。

代码语言:javascript
复制
 [self.navigationController pushViewController:_selectRoomVC animated:YES];
    
 [_selectRoomVC returnRoomName:^(NSString *roomName) {
         _addDeviceCellInfo.roomName = roomName;
   }];

这里我们就可以用任意的变量,来匹配Block传递进来的roomName参数。

至此,就已经完成了Block在两个页面间的传值,效果如上图,是不是其实也特别简单呢。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.05.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 房间列表界面
  • 第一个视图界面
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档