iOS block用法

最近在学习的过程中遇到一个问题,整个项目用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

2.在使用自定义cell填充表格的地方,实现块功能,这里以添加商品数量为例,减少商品数量和选中商品数量同下

        //添加商品数量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];

            }

        };



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。