正确地在自定义表格单元格中抓取UIButton的IndexPath.row?

时间:2012-05-25 20:40:22

标签: iphone ios ios5 uitableview

我有一个表视图,可以从Web加载信息,并将其显示在自定义单元格中。在这些自定义单元格中,我有一个通过故事板分配的按钮。

如果按下此按钮,则会触发一个方法(在cellForRowAtIndexPath方法中定义)

cell.viewArticleButton.action = @selector(viewArticle:); 

正是在这种方法中我遇到了麻烦。除了不使用为每个相应单元格提供的链接(每个索引路径上的链接)之外,该操作有效,而不是仅使用第一行的链接,无论我点击哪一行。

-(IBAction)viewArticle:(id)sender {

NSLog(@"View Article Button Tapped");

NewsCell *cell = (NewsCell *)[self.tableView dequeueReusableCellWithIdentifier:@"NewsCell"];

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

MWFeedItem *item = [itemsToDisplay objectAtIndex:indexPath.row];

   // Open link from item.link

}

任何帮助将不胜感激。我有一种感觉,就是这条线没有做我想做的事情:

NewsCell *cell = (NewsCell *)[self.tableView dequeueReusableCellWithIdentifier:@"NewsCell"];

2 个答案:

答案 0 :(得分:1)

这一行:

NewsCell *cell = (NewsCell *)[self.tableView dequeueReusableCellWithIdentifier:@"NewsCell"];

您正在获取对原型(或模板)单元格的引用。这不会让您在表格视图中唯一标识单元格。这只能识别从这个原型单元格创建的一组单元格。这就是为什么你总是得到第一排的原因;它返回使用此原型创建的第一个单元格。如果您只有一个标识符为@"NewsCell"的单元格(其他单元格具有不同的标识符),那么您的实现将起作用。

要唯一标识您点击的单元格,请按以下步骤操作:Detecting which UIButton was pressed in a UITableView

答案 1 :(得分:0)

为什么不在NSIndexPath中添加add到方法中:

cell.viewArticleButton.action = @selector(viewArticle:indexPath);

-(IBAction)viewArticle:(id)sender {
NSIndexPath *indexPath = (NSIndexPath *)sender;

NSLog(@"View Article Button Tapped for section %d, row $d", indexPath.section, indexPath.row);

// I have no idea why you are doing this...
NewsCell *cell = (NewsCell *)[self.tableView dequeueReusableCellWithIdentifier:@"NewsCell"];


MWFeedItem *item = [itemsToDisplay objectAtIndex:indexPath.row];

   // Open link from item.link

}