0

iOSのコントロール/UIViewにオブジェクトをアタッチして、処理しているコントロールを明確に把握するにはどうすればよいですか?

シナリオは、文字列の配列に「バインド」されたUITableViewがあることです。セルにカスタムコントロール(UISwitch)があり、行/セルの削除をトリガーすることがあります。

コールバック(UISwitchでaddTargetを呼び出すことによって設定)では、どのセルがイベントをトリガーしたかを知る方法がありません。

これを示すために使用できるUISwitchのプロパティはありますか。理想的には、元のデータソースオブジェクトを添付できます。Microsoftテクノロジでは、コントロールには、多くの場合、あらゆるもの(オブジェクト/ ID)への参照を保持できるタグプロパティがあります。ただし、Cocoa TouchのタグプロパティはNSUIntegerであり、実際には役に立ちません。配列の中央からアイテムを削除すると、インデックスの保存が機能しないためです。すべてが同期していません。

4

2 に答える 2

1

ビュー階層を使用して、テーブルビューセルを取得できます。

だからあなたは行動を切り替える

- (IBAction)flip:(id)sender{
  //switch
  UISwitch *s=(UISwitch *)sender;
  //cell
  UITableViewCell *cell=sender.superview; 
  //index path 
  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
  //then use the index path to access your array of strings
}
于 2012-09-24T05:49:40.747 に答える
0

結局、私は実際に連想参照を使用しました。

#import <objc/runtime.h>

..。

static char const * const ItemTagKey = "ItemTag";

プロパティを設定するには

objc_setAssociatedObject(sw, ItemTagKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

そしてそれを取り戻すために

objc_getAssociatedObject(sw, ItemTagKey);

これはうまく機能しているようです。

于 2012-09-24T18:44:07.020 に答える