1

UIView サブクラス オブジェクトを UIView に追加する場合 (たとえば、プロトタイプ UITableViewCell 内の UISwitch で、このスイッチを IBAction 経由で ViewController に接続する場合)、どのテーブル行が呼び出された UISwitch であるかをこのアクションでどのように確認できますか?

明確にするために画像を添付しました-UISwitchが呼び出されたときに、呼び出されたUISwitchがどの行にあるかを知りたい.

xcode

4

1 に答える 1

2

これを行う「最もクリーンな」方法は、スイッチにアクションをセル自体に送信させることだと思います。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];
}
于 2012-07-07T14:01:59.237 に答える