iOS开发——Block简单传值

本文详细介绍了如何在iOS开发中利用Block进行界面间的数据传递,包括Block的定义、使用及具体实现过程。

定义block,所以我们在第二个界面,声明并定义Block。

很多人对于创建block的界面容易搞混

来屡屡:首先我们是想要在当前的界面需要下一个界面返回来的值,当我们push下一界面时需要创建下一界面的对象才对,所以我们就在下一界面中定义一个block用于回传那里面的值,在我们push时,用创建的对象调用它的block方法,把接收过来的值用在当前的界面

仔细屡屡,感觉有点复杂,理解了就容易多了

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传值了,我们先来实现刚刚定义的函数方法。

- (void)returnRoomName:(SelectedRoomBlock)block{
    self.selectedRoomBlock = block;
}

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

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

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

@property (nonatomic, copy) NSString *selectedRoomStr;

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

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

-  (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属性。

 [self.navigationController pushViewController:_selectRoomVC animated:YES];

 [_selectRoomVC returnRoomName:^(NSString *roomName) {
         _addDeviceCellInfo.roomName = roomName;
   }];

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值