iOS中block的使用分为三个部分
1、第一部分声明,定义和使用Block,
2、第二部分__block关键字的使用
3、第三部分:Block作为property属性实现页面之间传值
日常项目中使用最多的是block的反向传值
这里总结了一下block的普通传值和在cell中的使用(经常用到)
1,普通的反向传值
block三部曲
声明:
@property (nonatomic,copy)void (^block) (NSString * text);
定义:
//结束编辑
-(void)textFieldDidEndEditing:(UITextField *)textField
{
//给block赋值
if (textField.text.length>0) {
self.block(textField.text);
[self.navigationControllerpopViewControllerAnimated:YES];
}
}
使用:
//点击屏幕任一位置跳转界面
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
SecondViewController*svc=[[SecondViewControlleralloc]init];
//取block的值
svc.block = ^(NSString * text){
self.navigationItem.title=text;
};
[self.navigationControllerpushViewController:svcanimated:YES];
}
这里避免重复定义或者使用,否则会崩溃2 在cell中的使用
1>声明:@property (strong,nonatomic)void (^didCollection)(LocationCityEntity *,NSIndexPath *);//传模型和系统的NSIndexPath 方便使用组和行
2>在系统方法中定义
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
LocationCityEntity * entity =self.hotArray[indexPath.row];
if(self.didCollection){
self.didCollection(entity,indexPath);//赋值模型和系统indexPath
}
}
3>在CitySelectViewController cell中的实现使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
if (tableView!=self.myTableView) {
staticNSString* cellId=@"cellId";
__weaktypeof(self) weakSelf=self;
myCell.didCollection=^(LocationCityEntity * entity,NSIndexPath *indexpa)
{
typeof(self) strongSelf=weakSelf;
NSString *msg = [NSStringstringWithFormat:@"切换地区将会登出当前账号,是否要切换至%@站?",entity.zxprovince];
UIAlertView *alert =[[UIAlertViewalloc]initWithTitle:@"提示"message:msgdelegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"确定",nil];
alert.tag =indexpa.row;
strongSelf.isShow=NO;
[alert show];
};
cell = myCell;
}
}
return cell;
}
附件:地区筛选的demo(免积分下载),使用了block ,类扩展,本地保存等(只为共同学习)
http://download.csdn.net/detail/bddzzw/9597894