UITableViewController内のUIButton
-
08-07-2019 - |
質問
各テーブルセル内に作成される 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:
メソッドにボタンが渡され、タグを抽出できます。
所属していません StackOverflow