2

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

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

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

4

2 に答える 2

2

UITableViewCell、そのままでは、テーブルに表示されている行を知りません。テーブル全体で同じセル インスタンスを再利用してデータを表示することを目的としていることを思い出してください。UITableViewControllerとはいえ、セルを設定してシステムに渡すのはユーザーの責任です (もちろん、インデックス パスも持っています) 。その時点で、次のようなことができます。

  • カスタム セル クラスであると仮定して、セル インスタンスにプロパティを設定して、表示されている行と、後でボタンが使用できる行を識別します。
  • これらのボタンをアクセサリ ビューとしてセルに配置する場合は、テーブル デリゲートのtableView:accessoryButtonTappedForRowWithIndexPath:メソッドを見てください。
  • tag1 セクションのテーブルの場合は、行インデックスをボタンのプロパティに格納するなど、非常に安っぽいことを行うことができます。メソッドstartVote:にボタンが渡され、そのタグを抽出できます。
于 2009-10-28T19:47:58.123 に答える
2

NSArrayのボタンに渡されるデータに何らかの種類があると思いますcellForRowAtIndexPath

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

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

編集:

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

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

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

于 2009-10-28T19:13:21.873 に答える