質問

各テーブルセル内に作成される UIButton があります。タッチイベントを次のように接続したいです。

[imageButton addTarget:self
                action:@selector(startVote:)
      forControlEvents:UIControlEventTouchUpInside];

現在の行に関するデータ(その行のオブジェクトのID)をstartVoteメソッドに渡します。これを行うために欠けている方法がありますか、またはいくつかのベストプラクティスを破っていますか?これは非常に普通のことのように思えますか?

役に立ちましたか?

解決

cellForRowAtIndexPath のボタンに渡されるデータを含む NSArray があると仮定します。

startVote でこれを試してください:

- (void)startVote:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSDictionary *myData = [myArray objectAtIndex:indexPath.row];
}

編集:

何らかの理由で行が選択されていない場合は、作成時にすべてのボタンに一意のタグを割り当ててから、

- (void)startVote:(id)sender {
    int myTag = [(UIButton *)sender tag];
    NSDictionary *myData = [myArray objectAtIndex:myTag];
}

tag を使用して何らかの操作を行うと、インデックスとして使用できます(すべての tag に特定の量を追加して、競合しないようにします) OSで使用される「自動」タグ付けを使用します。

他のヒント

UITableViewCell は、テーブルにどの行が表示されているのかすぐにはわかりません。意図は、同じセルインスタンスがテーブル全体で再利用され、データが表示されることです。つまり、 UITableViewController はセルをセットアップしてシステムに渡す役割を果たします(もちろん、インデックスパスもあります)。その時点で、次のようなことができます:

  • それがカスタムセルクラスであると仮定して、セルインスタンスにプロパティを設定して、表示する行と、後で使用できるボタンを識別します。
  • これらのボタンをアクセサリビューとしてセルに配置する場合は、テーブルデリゲートの tableView:accessoryButtonTappedForRowWithIndexPath: メソッド。
  • >
  • 1セクションのテーブルの場合、ボタンの tag プロパティに行インデックスを格納するなど、本当に安っぽいことができます。 startVote:メソッドにボタンが渡され、タグを抽出できます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top