码迷,mamicode.com
首页 > 其他好文 > 详细

外部获取IndexPath的几种方式(关联对象等)

时间:2019-01-08 01:01:18      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:eve   iat   self   return   sele   eww   nts   eid   wce   

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的几种方式(关联对象等)

标签:eve   iat   self   return   sele   eww   nts   eid   wce   

原文地址:https://www.cnblogs.com/tangyuanby2/p/10236634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!