UIView サブクラス オブジェクトを UIView に追加する場合 (たとえば、プロトタイプ UITableViewCell 内の UISwitch で、このスイッチを IBAction 経由で ViewController に接続する場合)、どのテーブル行が呼び出された UISwitch であるかをこのアクションでどのように確認できますか?
明確にするために画像を添付しました-UISwitchが呼び出されたときに、呼び出されたUISwitchがどの行にあるかを知りたい.
これを行う「最もクリーンな」方法は、スイッチにアクションをセル自体に送信させることだと思います。UITableViewCell をサブクラス化してそのアクションを実装し、それ自体をビュー コントローラーのメソッドに渡す必要があります (おそらく、ビュー コントローラーが接続されているデリゲートをセルに与えることによって)。これはかなりの華やかさです。以下に、より単純ですが適切ではない方法があります。
1 つの方法は、最初に (つまり、メソッドで)tag
テーブル ビュー セルを構成するときに、UISwitch でa を指定することです。tableView:cellForRowAtIndexPath:
のようなものswitch.tag = indexPath.row
; その後、スイッチにタグを要求することで、後でスイッチから行を取得できます。
もう 1 つの方法は、UITableViewCell が見つかるまで UISwitch のスーパービューを上方向に検索し、次にその行を見つけることです。何かのようなもの:
UIView *view = switch.superview;
while (view && ![view isKindOfClass:[UITableViewCell class]]) {
view = view.superview;
}
// at this point, view is nil or a table view cell; ask the table view for its index path
if (view) {
NSIndexPath *path = [tableView indexPathForCell:cell];
}