iOS如何在cellForRowAtIndexPath方法中获取当前选定的indexPath行?

5
我希望在表格的每个单元格中使用标签创建链接。
当用户点击链接时,将获取该单元格的[indexpath row],并使用该索引匹配包含字符串数据的数组索引。然后将该字符串发送到下一个推送页面。
我使用UITapGestureRecognizer轻敲标签,并将参数传递给选择器方法。
如何获取所选单元格上的标签的当前indexpath row
以下是我的示例代码:
 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
...
UITapGestureRecognizer *gestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openUrl:) ];
gestureRec.numberOfTouchesRequired = 1;
gestureRec.numberOfTapsRequired = 1;
[cell.listPrice addGestureRecognizer:gestureRec];
[gestureRec release];
...
}


- (void)openUrl:(id)sender
{
NSLog(@"DOwnload URL send >> %@",urlDownloadSend);
DownloadNowController *download =[[DownloadNowController alloc]initWithNibName:@"DownloadNowController" bundle:nil];
[self.navigationController pushViewController:download animated:YES];
[download release]; 
}

你想要什么?你想要当有人点击返回按钮并回到你的tableViewController时,应该选择之前选择的行吗? - Praveen-K
6个回答

15

要确定当前选择的单元格,您可以使用UITableView的下一个方法:

- (NSIndexPath *)indexPathForSelectedRow

但我不确定在UITapGestureRecognizer触发后你的单元格是否会被选中。

我建议你直接将单元格的行存储在gestureRec.viewtag属性中:

gestureRec.view.tag = indexPath.row;

然后在openUrl函数中,您可以通过获取sender.view.tag的值来确定所选单元格。


手势识别器(gestureRec)有标签属性吗?当我尝试这样做时,会出现未定义的方法错误。 - bpn
@bpn 你说得对,UIGestureRecognizer 没有 tag 属性,但我已经更新了我的答案以符合我的想法。 - Nekto
感谢您的更新,同时应该使用sender.view.tag来获取标签的值。 - bpn

3

您想要做什么不太清楚...您在UITableViewCell上放置了一个链接,触发其他操作吗?

UITableViewDelegate提供了一些非常酷的方法:

– tableView:willSelectRowAtIndexPath:
– tableView:didSelectRowAtIndexPath:
– tableView:willDeselectRowAtIndexPath:
– tableView:didDeselectRowAtIndexPath:

当您点击一个单元格时,将调用willSelectRowAtIndexPathdidSelectRowAtIndexPath方法,这会提供当前选定的NSIndexPath,您可以使用它来获取行,如下所示:
indexPath.row;

2

您可以使用全局变量来保存indexpath.row的值。

将行号存储在didSelectRow:atIndexPath:方法中。

var = indexPath.row;
[tableView reloadData];

var = indexPath.row;
[tableView reloadData];

然后在cellForRowAtIndexPath中使用它。

if(indexPath.row==var){

}


什么是 var hear? - Muju

1
你可以这样做:
在 cellForRowAtIndexPath 数据源方法中。
UIImageView* selectedBg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bg_selected.png"]];

cell.backgroundView = [[UIView alloc] initWithFrame: CGRectZero];
cell.selectedBackgroundView = selectedBg;
[cell.backgroundView setNeedsDisplay];
[selectedBg release];

1
您可以在您的UITableViewDelegate中实现方法`- tableView:willSelectRowAtIndexPath:`。在那里,您可以轻松地获取indexPath上的信息。

0
以下代码可用于获取当前选定的IndexPath行:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {

 NSLog(@"selected tableview row is %ld",(long)indexPath.row);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接