外部获取IndexPath的几种方式(关联对象等)
1、 一般方式
- (void)buttonAction:(UIButton *)sender
{
UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
NSLog(@"indexPath is = %i",indexPath.row);
}
2、runtime添加属性方式,即关联对象的方式
//runtime 关联对象
这种方式首先引入#import <objc/runtime.h>
- (UITableViewCell *)tableView:(UITableView *)tableVie cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identiStr = @"cellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identiStr];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identiStr];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 100, 33);
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
button.tag = 110 + indexPath.row;
[cell.contentView addSubview:button];
}
UIButton *button = (UIButton *)[cell.contentView viewWithTag:110];
//runtime 关联对象
objc_setAssociatedObject(button, @"button", indexPath, OBJC_ASSOCIATION_ASSIGN);
[button setTitle:dataSource[indexPath.row] forState:UIControlStateNormal];
return cell;
}
//事件触发 runtime 获取关联的对象
- (void)buttonAction:(UIButton *)sender
{
//runtime 获取关联的对象
UITableViewCell *cell = objc_getAssociatedObject(sender, @"button");
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
NSLog(@"indexPath is = %ld",indexPath.row);
}
二、已知具体row,获取indexPath
- (void) refreshLessTime
{
for (int row = 0; row < leftTimeArr.count; row ++)
{
NSIndexPath *indexPath = [NSIndexPath indexPathForItem: row inSection:0];
UITableViewCell *cell = (UITableViewCell *)[_tableView cellForRowAtIndexPath:indexPath];
UILabel *remainingTimeLabel = (UILabel *)[[cell.contentView viewWithTag:500] viewWithTag:501];
remainingTimeLabel.text = [leftTimeArr objectAtIndex:indexPath.row];
}
}
外部获取IndexPath的几种方式(关联对象等)的更多相关文章
- django一对一数据库建立和进行数据传输的3种方式all()(对象) values()(字典) values_list()(元组)
class Business(models.Model): caption = models.CharField(max_length=32) code = models.CharField(max_ ...
- 获取Type的三种方式
using System;using UnityEngine; public class Type_Test : MonoBehaviour{ private void Awake() { ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- AngularJS中获取数据源的几种方式
在AngularJS中,可以从$rootScope中获取数据源,也可以把获取数据的逻辑封装在service中,然后注入到app.run函数中,或者注入到controller中.本篇就来整理获取数据的几 ...
- maven 引入外部jar包的几种方式(转)
原文链接: maven 引入外部jar包的几种方式 方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud< ...
- java 获取时间戳的三种方式
java 获取时间戳的三种方式 CreationTime--2018年7月13日16点29分 Author:Marydon 1.实现方式 方式一:推荐使用 System.currentTimeMi ...
- 【Struts2】Struts2获取session的三种方式
1.Map<String,Object> map = ActionContext.getContext().getSession(); 2.HttpSession session = S ...
- js获取时间戳的三种方式
js获取时间戳的三种方式 CreateTime--2018年5月23日08:44:10 Author:Marydon // 方式一:推荐使用 var timestamp=new Date().ge ...
- Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)
一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
随机推荐
- go 异常处理
package main import "fmt" func main() { defer func() { if err := recover(); err != nil { f ...
- ubuntu 14.04 添加、删除用户,修改用户名称,修改主机名
ubuntu添加用户 sudo adduser test ubuntu删除用户 sudo userdel test cd /home/ sudo rm -r test
- GRASP (职责分配原则)
要学习设计模式,有些基础知识是我们必须要先知道的,设计模式是关于类和对象的一种高效.灵活的使用方式,也就是说,必须先有类和对象,才能有设计模式的用武之地,否则一切都是空谈,那么类和对象是从那冒出来的呢 ...
- windows 网页打不开github网站
gitbub是外网,经常会遇到访问不了的问题,并且有时能访问也网速好慢. 解决这个问题的方法是 更改hosts文件,地址:C:\Windows\System32\Drivers\etc 我在hosts ...
- MySQL修改时间函数 1.addDate(date , INTERVAL expr unit) 2.date_format(date,’%Y-%m-%d’) 3.str_to_date(date,’%Y-%m-%d’) 4.DATE_SUB(NOW(), INTERVAL 48 HOUR)
MySQL修改时间函数: 1. addDate(date,INTERVAL expr unit) interval 代表时间间隔 : SELECT NOW(); 2018-06 ...
- 雷林鹏分享:Ruby 变量
Ruby 变量 变量是持有可被任何程序使用的任何数据的存储位置. Ruby 支持五种类型的变量.您已经在前面的章节中大概了解了这些变量,本章节将为您详细讲解这五种类型的变量. Ruby 全局变量 全局 ...
- [.NET开发] C#实现发送手机验证码功能
之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上 ...
- BeanShell使用json.jar包处理Json数据
环境准备 ①Jmeter版本 ,JDK ②前置条件:将json.jar包置于..\lib\下, 如果还是报错,可以将该jar包添加到测试计划的Library中:否则会报:Typed variable ...
- wpf窗口阴影
https://www.cnblogs.com/yiyan127/p/6362509.html
- 『cs231n』循环神经网络RNN
循环神经网络 循环神经网络介绍摘抄自莫凡博士的教程 序列数据 我们想象现在有一组序列数据 data 0,1,2,3. 在当预测 result0 的时候,我们基于的是 data0, 同样在预测其他数据的 ...