0

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"];
4

2 に答える 2

1

この行で:

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

プロトタイプ(またはテンプレート)セルへの参照を取得しています。これでは、テーブルビューでセルを一意に識別できません。これは、このプロトタイプセルから作成されたセルのグループのみを識別できます。これが、常に最初の行を取得する理由です。このプロトタイプを使用して作成された最初のセルを返します。識別子を持つセルが1つしかない場合@"NewsCell"(他のセルは異なる識別子を持つ)、実装は機能します。

クリックしたセルを一意に識別するには、次のスレッドに従ってください。UITableViewで押されたUIButtonを検出します

于 2012-05-25T20:49:23.453 に答える
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

}
于 2012-05-25T20:48:47.240 に答える