iOS block用法

近来在就学的经过中遭受二个标题,整个项目用UINavigationController作为根调整器,某多少个表试图控制器选拔了自定义的UITableViewCell,该类cell有自定义的几个按钮,当点击cell的别的八个按键时索要掌握当前是哪位cell甚至哪些按键被点击然后做相应的事件响应(改革该行数据,页面跳转等),以前用过代理,这叁回看换生机勃勃种艺术,所以采纳了用块来取代,上边列出详细步骤

1.在自定义的cell头文件中注明块,并定义相应的块类型

#import

@class ShopingCartTableViewCell;

//块申明

typedef void(^reduceGoodNumS)(ShopingCartTableViewCell *);

typedef void(^addGoodNumS)(ShopingCartTableViewCell *);

typedef void(^selectGoodS)(ShopingCartTableViewCell *);

@interface ShopingCartTableViewCell : UITableViewCell

//相应的块变量定义

@property (strong, nonatomic) reduceGoodNumS reduceGoodNumBlock;

@property (strong, nonatomic) addGoodNumS addGoodNumBlock;

@property (strong, nonatomic) selectGoodS selectGoodBlock;

@end

2.在运用自定义cell填充表格的地点,完成块功效,这里以丰盛商品数量为例,减弱商品数量和当选商品数量同下

//增多商品数量block

cell.addGoodNumBlock = ^(ShopingCartTableViewCell *cell)

{

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

NSDictionary *goodsDic = [self.dataSource
objectAtIndex:indexPath.section];

block简单用法。NSArray *goodsArray = [goodsDic objectForKey:@”array”];

self.good = [goodsArray objectAtIndex:indexPath.row];

self.good.num = [cell.numTF.text intValue]+1;

// 扩大商品数量

if ([self alertNum])

{

cell.numTF.text = [NSString stringWithFormat:@”%d”,[cell.numTF.text
intValue] + 1];

}

// 改过总金额

if (cell.checkboxBtn.selected)

{

[self alertSelecedGoodNum];

// 计算价格

[self alertSum];

indexPath = [NSIndexPath indexPathForRow:0
inSection:self.dataSource.count];

NSArray *indexArray=[NSArray arrayWithObject:indexPath];

[self.tableView reloadRowsAtIndexPaths:indexArray
withRowAnimation:UITableViewRowAnimationAutomatic];

}

};

block用法
近年来在攻读的长河中相见二个标题,整个项目用UINavigationController作为根调控器,某叁个表试图调节器选拔了自定义的UITableVie…

block
是iOS4.0随后现身的才具,block变量能够看成oc的靶子,但block的语法和技术是更底层c的知识,效能比代理高

直接定义二个艺术,方法里有二个block,直接定义加实现

block变量的实质是叁个无名氏函数(函数能够有参数、能够有重临值但未有函数名卡塔尔(英语:State of Qatar)

-(void)getA:(int)a getB:(int)b block:(void(^)(intc))myBlock

声Bellamy(Bellamy卡塔尔个最简易的block变量, _myFirstBlock
为变量的称号,申明时规定了要赋给_myFirstBlock的函数,未有参数、未有重临值

{

(1)定义 block  

myBlock(a+b);

@interfaceRootViewController()

}

{

然后直接调用这么些法子

void(^_myFirstBlock)(void);

[selfgetA:1getB:1block:^(intc) {

//声明_mySecondBlock,规定了要赋给它的函数,带有多少个NSInteger的参数和三个NSInteger的重返值

NSLog(@”%d”,c);

NSInteger(^_mySecondBlock)(NSIntegera,NSIntegerb);

}];

NSString*(^_myThirdBlock)(NSString*str1,NSString*str2);

block 里 int c 后得以写多个参数   int c,int d等等。

相关文章