将对象附加到控件以指示 UITableView 中的状态



如何在 iOS 中将对象附加到控件/UIView,以便我可以清楚地知道我正在处理哪个控件?

场景是我有一个"绑定"到字符串数组的 UITableView。我在单元格中有一个自定义控件(UISwitch),有时会触发行/单元格的删除。

在回调(通过在我的 UISwitch 上调用 addTarget 设置)中,我无法知道哪个单元格触发了事件。

UISwitch 上是否有可用于指示此的属性。理想情况下,我可以附加原始数据源对象。在Microsoft技术中,控件通常具有一个标记属性,该属性可以保存对任何内容(对象/id)的引用。但是,Cocoa Touch 中的 tag 属性是一个 NSUInteger,它并没有真正的帮助 - 因为一旦您从数组中间删除了项目,存储索引就不起作用;一切都不同步。

您可以使用视图层次结构获取表视图单元格。

所以在你切换动作

- (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
}

最后,我实际上使用了关联引用,例如

#import <objc/runtime.h>

static char const * const ItemTagKey = "ItemTag";

设置属性

objc_setAssociatedObject(sw, ItemTagKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

并把它找回来

objc_getAssociatedObject(sw, ItemTagKey);

这似乎运作良好。

最新更新