最近在学习的过程中遇到一个问题,整个项目用UINavigationController作为根控制器,某一个表试图控制器使用了自定义的UITableViewCell,该类cell有自定义的几个按钮,当点击cell的任何一个按钮时需要知道当前是哪个cell以及哪个按钮被点击然后做相应的事件响应(更改该行数据,页面跳转等),之前用过代理,这一次想换一种方式,所以选择了用块来代替,下面列出详细步骤
1.在自定义的cell头文件中申明块,并定义相应的块类型
#import <UIKit/UIKit.h>
@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
//添加商品数量block
cell.addGoodNumBlock = ^(ShopingCartTableViewCell *cell)
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSDictionary *goodsDic = [self.dataSource objectAtIndex:indexPath.section];
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];
}
};