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];

}

};

时间: 2024-10-03 22:38:31

iOS block用法的相关文章

iOS block 用法

1.定义Block /* 回传void ,参数也是void 的block*/ void (^blockReturningVoidWithVoidArgument)( void ); /* 回传整数,两个参数分别是整数和字元型态的block*/ int   (^blockReturningIntWithIntAndCharArguments)( int , char ); /* 回传void ,含有10 个block 的阵列,每个block 都有一个型态为整数的参数*/ void (^arrayO

iOS Block 用法 (1)-once again

Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal.行为主体可以用return回传值,类型会被compiler自动辨别.如果没有参数列要写成: ^(void). 例如下面的一个例子: [cpp] view pla

iOS中block用法之两个界面传值问题

Block的使用有很多方面,其中传值只是它的一小部分,但是很常用更实用,下面介绍Block在两个界面之间的传值用法: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个Label和一个Button,其中Label是为了显示第二个视图控制器传过来的字符串, Button是为了push到第二个界面. 第二个界面的只创建一个TextField,是为了输入文字,当输入文字并且返回第一个界面的时候(第二个视图将要消失的时候),就将这个 TextFiled中的文字传给第一个界面并且显示在

IOS block 教程&lt;转&gt;

http://pernghh.pixnet.net/blog/trackback/eac87d412e/33563409 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化了,原来是繁体,变数=变量,这个注意一下. 本章学习目标: 1. 了解何谓block. 2. 了解block的使用方法. Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容易了解,但是在iOS SDK 4.0之后,block几乎

iOS block从零开始

iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void (^myBlock)(int a) = ^(int a){ NSLog(@"%zd",a); }; NSLog(@"旭宝爱吃鱼"); myBlock(999); 输出结果: 2016-05-03 11:27:18.571 block[5340:706252] 旭宝爱吃鱼

写给喜欢用Block的朋友(ios Block)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/38090205 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 本文不讲block如何声明及使用,只讲block在使用过程中暂时遇到及带来的隐性危险. 主要基于两点进行演示: 1.block 的循环引用(retain cycle) 2.去除block产生的告警时,需注意问题. 有一次,朋友问我当一个对象中的b

iOS block并发

iOS block并发 2012-06-13 09:31 1351人阅读 评论(0) 收藏 举报 iosuiviewnetwork任务threadimage 这篇文章转自 http://anxonli.iteye.com/blog/1097777,集中与iOS的多核编程和内存管理,大家完全可以使用苹果的多核编程框架来写出更加responsive的应用. 多核运算 在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), GCD的使用非常简单.它把任务

(译)IOS block编程指南 1 介绍

Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block ca

display:Block 用法分析

根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为"block",成为"块级"元素(block-level):而span元素的默认display属性值为"inline",称为"行内"元素. 块级元素: 动占据一定矩形空间,可以通过设置高度.宽度.内外边距等属性,来调整的这个矩形的样子: 行内元素: 自己的