转载自:http://blog.csdn.net/kmyhy/article/details/6442351

使用的话,例如:

  1. cell.accessoryType = UITableViewCellAccessoryNone;//cell没有任何的样式
  2. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;//cell的右边有一个小箭头,距离右边有十几像素;
  3. cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//cell右边有一个蓝色的圆形button;
  4. 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属性的更多相关文章

  1. uitableviewcell cell.accessoryType 右箭头

    实现右侧的小灰色箭头  只要将cell的accessoryType属性设置为 UITableViewCellAccessoryDisclosureIndicator就可以了. 代码为:cell.acc ...

  2. (十五)UITableViewCell的常见属性

    UItableViewCellStyle: typedef NS_ENUM(NSInteger, UITableViewCellStyle) { UITableViewCellStyleDefault ...

  3. 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件

    重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件 为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢? 其实,隐藏cell中某 ...

  4. iOS UITableViewCell AccessoryType属性

    写了这么长时间的ios table 竟然不知道有一个Accessory来显示详情设置小图标,曾经竟然傻帽的取用一张图片来显示,如今想想真是..那痛啊.... cell.accessoryType = ...

  5. UITableViewCell的separatorInset属性

    separatorInset这个属性是IOS7后才有的属性,所以需要判断一下,才能修改 if (IOS7_OR_LATER) { cell.separatorInset = UIEdgeInsetsZ ...

  6. iOS边练边学--UITableViewCell的常见属性设置

    // 取消选中的样式(常用) 让当前 cell 按下无反应 cell.selectionStyle = UITableViewCellSelectionStyleNone; // 设置选中的背景色,U ...

  7. IOS客户端Coding项目记录导航

    IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线  表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...

  8. IOS客户端Coding项目记录(二)

    9:第三方插件整理 JSON转实体:jsonModel https://github.com/icanzilb/JSONModel/ 美化按键:BButton https://github.com/m ...

  9. ios cell常用属性

    1.设置UITableViewCell的accessoryView 有时候我们需要设置cell的一些样式,比如下图, 这个就是设置了cell的accessory属性的内容,如果我们想在上面显示Swit ...

随机推荐

  1. 2.&与&&以及位运算符。

    这是单独的一块,因为一条讲不清楚(虽然内容也不够一篇),而且我之前也没好好弄清楚,所以有必要写出来. 说位运算符也是从&与&&(|与||类似)之间的区别讲起的.事实上,对于两个 ...

  2. MongoDB 启动异常

    今天启动MongoDB遇到异常状况 mongodb warning: 32-bit servers don't have journaling enable 解决方法: 删除数据库目录的.lock文件 ...

  3. oracle 导入txt

    没有Oraclehoume的情况下,执行下环境变量文件 sqlldr userid= DM/DM control = /home/oracle/libc/load.ctl load data infi ...

  4. oracle中 some、any、all 三者的区别及个人总结,归纳!

    any :如果是大于号时( a > b ),那么a中所有大于b中最小的那个数的值,就会被输出出来. 如果是小于号时( a < b ),那么a中所有小于b中最大的那个数的值,就会被输出出来. ...

  5. [LeetCode]题解(python):136-Single Number

    题目来源: https://leetcode.com/problems/single-number/ 题意分析: 给定一个数组,每个数都出现了2次,只有一个出现了一次,找出这个数.要求时间复杂度O(n ...

  6. sql发邮件

    DROP PROCEDURE USP_CheckProductCodeRepeatAndSendMail go ---检查商家是否有重复的商品编号,如果有则发送给系统配置中接收的用户邮箱 CREATE ...

  7. 转: Promises与Javascript异步编程

    在如今都追求用户体验的时代,Ajax应用真的是无所不在.加上这些年浏览器技术.HTML5以及CSS3等的发展,越来越多的富Web应用出现:在给与我们良好体验的同时,Web开发人员在背后需要处理越来越多 ...

  8. CodeForces 235C Cyclical Quest(后缀自动机)

    [题目链接] http://codeforces.com/contest/235/problem/C [题目大意] 给出一个字符串,给出一些子串,问每个子串分别在母串中圆环匹配的次数,圆环匹配的意思是 ...

  9. URAL 1297 Palindrome(后缀数组+ST表)

    [题目链接] http://acm.timus.ru/problem.aspx?num=1297 [题目大意] 求最长回文子串,并输出这个串. [题解] 我们将原串倒置得到一个新的串,加一个拼接符将新 ...

  10. Speex manul中文版

    Speex manul中文版   在VOIP的音频算法中,回音处理已经成为一个关系通话质量的主要问题. 回声的产生在IP网络主要有两种:1.声学回声2.电路回声 声学回声主要又分成以下几种:a ) 直 ...