我有一个表视图,可以从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"];
答案 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
}