在使用tableview时,有时我们需要在cell中添加button和label,以便添加某项功能,而且往往点这个button的方法中需要知道button所在cell中label内存放的值。

一般而言我们可以用tag来做,但当table有很多行的时候,设置tag就没有那么方便了,这里我介绍另外一种方法。

我们知道IOS里每一个视图都有父视图,那我们可不可以用这个方法获取cell呢?

经过一番查找测试发现superview方法可以找到button所在cell

给button写上这样的方法

-(void)btn_Onclick:(id)sender
{
UIButton *btn = (UIButton *)sender; NSLog(@" [btn superview] = %@ ",[[btn superview]class]);
NSLog(@" [[[btn superview]superview]class] = %@",[[[btn superview]superview]class]);
}

输出结果如下

-- ::42.203 superview[:60b]  [btn superview] =  UITableViewCellScrollView
-- ::42.646 superview[:60b] [[[btn superview]superview]class] = UITableViewCell

说明这样没问题。但经过我的测试发现,对于自己写的继承自uitableviewcell的类,(这里我是SongTableViewCell)需要稍作修改。

    NSLog(@" [btn superview] =  %@ ",[[btn superview]class]);
NSLog(@" [[[btn superview]superview]class] = %@",[[[btn superview]superview]class]);
NSLog(@" [[[btn superview]superview]superview]class] = %@",[[[[btn superview]superview]superview] class]);

输出结果如下:

-- ::50.036 Music_Player[:60b]  [btn superview] =  UITableViewCellContentView
-- ::50.036 Music_Player[:60b] [[[btn superview]superview]class] = UITableViewCellScrollView
-- ::50.036 Music_Player[:60b] [[[btn superview]superview]superview]class] = SongTableViewCell

PS:对于viewwithtag方法多说一句,这个方法不能寻找tag为0的控件,就算自己button的tag为0也无法找到,猜测是与系统默认的空间重复。

IOS 通过button获取cell的更多相关文章

  1. ios uitableview button 获取cell indexpath.row

    在iOS7下面已经无效,因为iOS7的层级关系发生变化 UITableViewCell->UITableViewCellScrollView->UITableViewCellContent ...

  2. button 获取 cell

        - (void)cellBtnClicked:(id)sender event:(id)event {     NSSet *touches =[event allTouches];      ...

  3. iOS UITableView中关于cell里的按钮被点击时如何确定是哪一个section

    在section=10:row=1:的UITableView中,每一个cell都带有一个按钮,例如如下的图片一样每一个cell中都有一个“进入店铺的按钮”,但是如果我点击相应的cell要进入对应的店铺 ...

  4. iOS根据Url 获取图片尺寸

    iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...

  5. iOS 7.0获取iphone UDID 【转】

    iOS 7.0 iOS 7中苹果再一次无情的封杀mac地址,使用之前的方法获取到的mac地址全部都变成了02:00:00:00:00:00.有问题总的解决啊,于是四处查资料,终于有了思路是否可以使用K ...

  6. 李洪强iOS开发-网络新闻获取数据思路回顾

    李洪强iOS开发-网络新闻获取数据思路回顾 01 创建一个继承自AFHTTPSessionManager的工具类:LHQNetworkTool 用来发送网络请求获取数据  1.1 定义类方法返回单例对 ...

  7. iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)

    iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...

  8. 通过控件获取cell

    #pragma mark - 通过控件获取cell -(UITableViewCell*)GetCellFromTableView:(UITableView*)tableView Sender:(id ...

  9. 一行代码巧妙实现iOS返回button

    一行代码巧妙实现iOS返回button: self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[ ...

随机推荐

  1. 为什么设计模式在C++社区没有Java社区流行?

    我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?    昨天和同事讨论这个问题,最后得出几点原因:     (1)C++内存需要 ...

  2. qt编写一个只能运行单个实例的程序,不用Windows API

    QtSingleApplicationhttp://code.qt.io/cgit/qt-solutions/qt-solutions.git/tree/qtsingleapplication 已打开 ...

  3. php5,Apache在windows 7环境搭建

    主要是参考以下文章: http://www.cnblogs.com/Yogurshine/archive/2013/05/24/3097343.html http://jingyan.baidu.co ...

  4. Oracle实例与Oracle数据库

    数据库实例是用于和操作系统进行联系的标识,也就是说数据库和操作系统之间的交互使用的是数据库实例. 数据库实例名(instance_name) 实例名也被写入参数文件中,该参数为instance_nam ...

  5. BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排

    1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 400  Solved: 290 ...

  6. C++中输出流运算符的重载

    cout是ostream类的对象,cin是istream类的对象. 我们平时用的cout<<就相当于cout.operator<<(...).也就是说正常使用(不对operat ...

  7. Java Hibernate 之连接池详解

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在配置连接池时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hiber ...

  8. [置顶] 宏途_LCD调试流程.

    今天在调试宏途的LCD屏时,开始是开机屏幕不亮,背光都不亮,可能板子已经损坏,一般通过测试电流电压简单验证,(注:硬件引脚没焊好也会引起读lcd id出现错误!!!)出现这个问题一般是因为引脚没焊好, ...

  9. Javascript:getElementsByClassName

    背景: 由于原生的getElementsByClassName不支持在指定标签中查找指定元素为指定class的情况,所以,这里舍弃了原生的方法调用   方法一: function getElement ...

  10. 杭州电 1372 Knight Moves(全站搜索模板称号)

    http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Others)   ...