block 页面传值小结
我以自己项目中的一个模块为例,首先有两个页面,第一个页面为显示城市页面,第二个页面为选择要使用block传的值(城市名)。
第一个页面中的显示控件:
//自定义左部定位视图
self.locView = [[LocationView alloc] initWithFrame:CGRectMake(0, 0, SCREENWIDTH/2-35, 25)];
self.locView.imgView.image = [UIImage imageNamed:@"around"];
UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cityListView)];
[self.locView addGestureRecognizer:tapGes];
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithCustomView:_locView];
self.navigationItem.leftBarButtonItem = leftButton;
第二个页面的选择页面:
首先要在.h文件中声明block代码块
typedef void(^ChangeCityBlock)(NSString *cityStr);
@interface CityListViewController : UIViewController{
ChangeCityBlock _sendBlock;
}
//此属性适用于页面间的正向传值
@property(nonatomic, copy) NSString *currentCity;
//代码块为反向传值
-(void)setSendBlock:(ChangeCityBlock)block;
-(ChangeCityBlock)sendBlock;
@end
到这里准备找工作已做好,下面是传值关键
当我们从第一个页面跳转至第二个页面时,我的代码如下,仅供参考:
//城市列表
-(void)cityListView{
CityListViewController *clVC = [[CityListViewController alloc] init];
[clVC setSendBlock:^(NSString *cityStr) {
_locView.cityLb.text = cityStr;
}];
clVC.currentCity = _locView.cityLb.text;
[self.navigationController pushViewController:clVC animated:YES];
}
接下来,要在第二个页面实现定义的block方法,将对应的参数反传至上个界面
-(void)setSendBlock:(ChangeCityBlock)block{
if (_sendBlock != block) {
_sendBlock = [block copy];
}
}
-(ChangeCityBlock)sendBlock{
return _sendBlock;
}
最后,当我们在第二个页面确定返回的值并返回第一个页面时,要触发一个方法,将要返回的值传入block代码中
-(void)blockReturnCity:(NSString *)city{
if (self.sendBlock) {
self.sendBlock(city);
}else{
NSLog(@"没有传入block");
}
[self goback];
}
以此即可将在第二个页面中确定的值传到第一个页面。
注:此次总结只是以为自己的iOS学习做备忘录为目的,在思路或是步骤顺序上若有混乱,请谅解!大家若有好的方法也请不吝赐教。