如何将对象附加到iOS中的控件/ UIView,以便我可以清楚地知道我正在处理哪个控件?
场景是我有一个UITableView,它绑定到一个字符串数组。我在单元格中有一个自定义控件(UISwitch),有时会触发删除行/单元格。
在回调中(通过在我的UISwitch上调用addTarget设置)我无法知道哪个单元格触发了该事件。
UISwitch上是否有可用于表明此属性的属性。理想情况下,我可以附加原始数据源对象。在Microsoft技术中,控件通常具有可以保存对任何内容(对象/ id)的引用的标记属性。但是,Cocoa Touch中的tag属性是一个NSUInteger并没有什么帮助 - 因为一旦你从数组的中间删除了一个项目,存储索引就不起作用了。一切都不同步。
答案 0 :(得分:1)
您可以使用视图层次结构获取tableview单元格。
所以在你切换动作
- (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
}
答案 1 :(得分:0)
最后我实际上使用了关联引用,例如
#import <objc/runtime.h>
...
static char const * const ItemTagKey = "ItemTag";
设置属性
objc_setAssociatedObject(sw, ItemTagKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
并将其取回
objc_getAssociatedObject(sw, ItemTagKey);
这似乎运作良好。