【转】关于UItableViewCell的accessoryType属性
转载自:http://blog.csdn.net/kmyhy/article/details/6442351
使用的话,例如:
- cell.accessoryType = UITableViewCellAccessoryNone;//cell没有任何的样式
- cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//cell的右边有一个小箭头,距离右边有十几像素;
- cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//cell右边有一个蓝色的圆形button;
- cell.accessoryType = UITableViewCellAccessoryCheckmark;//cell右边的形状是对号;
对于 UITableViewCell 而言,其 accessoryType属性有4种取值:
UITableViewCellAccessoryNone,
UITableViewCellAccessoryDisclosureIndicator,
UITableViewCellAccessoryDetailDisclosureButton,
UITableViewCellAccessoryCheckmark
分别显示 UITableViewCell 附加按钮的4种样式:
无、
、
、
。
除此之外,如果你想使用自定义附件按钮的其他样式,必需使用UITableView 的 accessoryView 属性。比如,我们想自定义一个
的附件按钮,你可以这样做:
UIButton *button ;
if(isEditableOrNot){
UIImage *image= [UIImage imageNamed:@"delete.png"];
button = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
button.frame = frame;
[button setBackgroundImage:imageforState:UIControlStateNormal];
button.backgroundColor= [UIColor clearColor];
cell.accessoryView= button;
}else {
button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor= [UIColor clearColor];
cell.accessoryView= button;
}
这样,当 isEditableOrNot 变量为 YES 时,显示如下视图:

但仍然还存在一个问题,附件按钮的事件不可用。即事件无法传递到 UITableViewDelegate 的accessoryButtonTappedForRowWithIndexPath 方法。
也许你会说,我们可以给 UIButton 加上一个 target。
好,让我们来看看行不行。在上面的代码中加入:
[button addTarget:self action:@selector(btnClicked:event:) forControlEvents:UIControlEventTouchUpInside];
然后实现btnClicked方法,随便在其中添加点什么。
点击每个 UIButton,btnClicked 方法中的代码被调用了!一切都是那么完美。
但问题在于,每个 UITableViewCell 都有一个附件按钮,在点击某个按钮时,我们无法知道到底是哪一个按钮发生了点击动作!因为addTarget 方法无法让我们传递一个区别按钮们的参数,比如 indexPath.row 或者别的什么对象。addTarget 方法最多允许传递两个参数:target和 event,而我们确实也这么做了。但这两个参数都有各自的用途,target 指向事件委托对象——这里我们把 self 即 UIViewController实例传递给它,event 指向所发生的事件比如一个单独的触摸或多个触摸。我们需要额外的参数来传递按钮所属的 UITableViewCell 或者行索引,但很遗憾,只依靠Cocoa 框架,我们无法做到。
但我们可以利用 event 参数,在 btnClicked 方法中判断出事件发生在UITableView的哪一个 cell 上。因为 UITableView 有一个很关键的方法 indexPathForRowAtPoint,可以根据触摸发生的位置,返回触摸发生在哪一个 cell 的indexPath。 而且通过 event 对象,我们也可以获得每个触摸在视图中的位置:
// 检查用户点击按钮时的位置,并转发事件到对应的accessorytapped事件
- (void)btnClicked:(id)senderevent:(id)event
{
NSSet *touches =[event allTouches];
UITouch *touch =[touches anyObject];
CGPointcurrentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath= [self.tableView indexPathForRowAtPoint:currentTouchPosition];
if (indexPath!= nil)
{
[self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
}
}
这样,UITableView的accessoryButtonTappedForRowWithIndexPath方法会被触发,并且获得一个indexPath 参数。通过这个indexPath 参数,我们可以区分到底是众多按钮中的哪一个附件按钮发生了触摸事件:
-(void)tableView:(UITableView*)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*)indexPath{
int* idx= indexPath.row;
//在这里加入自己的逻辑
⋯⋯
}
【转】关于UItableViewCell的accessoryType属性的更多相关文章
- uitableviewcell cell.accessoryType 右箭头
实现右侧的小灰色箭头 只要将cell的accessoryType属性设置为 UITableViewCellAccessoryDisclosureIndicator就可以了. 代码为:cell.acc ...
- (十五)UITableViewCell的常见属性
UItableViewCellStyle: typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault ...
- 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件
重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件 为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢? 其实,隐藏cell中某 ...
- iOS UITableViewCell AccessoryType属性
写了这么长时间的ios table 竟然不知道有一个Accessory来显示详情设置小图标,曾经竟然傻帽的取用一张图片来显示,如今想想真是..那痛啊.... cell.accessoryType = ...
- UITableViewCell的separatorInset属性
separatorInset这个属性是IOS7后才有的属性,所以需要判断一下,才能修改 if (IOS7_OR_LATER) { cell.separatorInset = UIEdgeInsetsZ ...
- iOS边练边学--UITableViewCell的常见属性设置
// 取消选中的样式(常用) 让当前 cell 按下无反应 cell.selectionStyle = UITableViewCellSelectionStyleNone; // 设置选中的背景色,U ...
- IOS客户端Coding项目记录导航
IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线 表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...
- IOS客户端Coding项目记录(二)
9:第三方插件整理 JSON转实体:jsonModel https://github.com/icanzilb/JSONModel/ 美化按键:BButton https://github.com/m ...
- ios cell常用属性
1.设置UITableViewCell的accessoryView 有时候我们需要设置cell的一些样式,比如下图, 这个就是设置了cell的accessory属性的内容,如果我们想在上面显示Swit ...
随机推荐
- cocos2d-x3.6 连连看随机地图实现
我的博客:http://blog.csdn.net/dawn_moon 这一节来讲地图初始化实现. 连连看地图初始化有非常多实现方式,大概会有下面几种: 每一格的位置随机取图片放上去 随机取图片放到随 ...
- Oracle 客户端配置笔记
1.右击桌面的我的电脑 -> 高级 -> 环境变量,新建 1) 变量名:ORACLE_HOME 变量值:D:\app\instantclient_11_2 2) 变量名:TNS_ADMIN ...
- spring mvc 简单搭建
文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下. web.xml配置: </load-on-startup> </servlet> ...
- leetcode Palindrome Number python
class Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool &quo ...
- .Net页面缓存OutPutCachexian详解
一 它在Web.Config中的位置 <system.web> <!--页面缓存--> <caching> <outputCacheSettings> ...
- R与数据分析旧笔记(十八完结) 因子分析
因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...
- jquery选择器结果是数组时需要主要的一个问题
代码很简单,如下 <div id="div1"> <span>111</span> <span>222</span> & ...
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- PE头的应用---插入代码到EXE或DLL文件中
三.代码实现(DELPHI版本),采用第三种方式实现代码插入. 1. 定义两个类,一个用来实现在内存中建立输入表:一个用来实现对PE头的代码插入. DelphiCode: const MAX_SECT ...
- 高级复制实验配置添加复制节点操作时报错:ORA-23308: object GP.T does not exist or is invalid
出错原因: 使用高级复制时,在源端启动复制支持,执行语句:REPADMIN@bys1>execute dbms_repcat.generate_replication_support('gp', ...