我有几个实例化UIControl类Foo的实例,一个实例对应于UITableView中的每个单元格。班级有:
BOOL selected;
UIImageView *imageView;
UIImage *imageOne;
UIImage *imageTwo;
我为每个实例分配了一个标签:
foo.tag = indexPath.row;
我现在想通过其标签为一个(或几个)特定实例引用UIImageView.image,将其切换到另一个图像。
在我的搜索中,我看到类使用initWithTag为类分配标签(我假设它们正在分配标签)......
SomeClass *someClass = [[SomeClass alloc]initWithTag:1 ...
[someArray addObject: [[SomeClass alloc]initWithTag:2 ...
[someArray addObject: [[SomeClass alloc]initWithTag:3 ...
...但我还没有看到它们后来如何被该标签引用。
我看过对getChildByTag的引用,它有承诺,但我在文档或示例中找不到它(可能不是iphone)。
有没有人知道如何使用实例的标签引用实例中的imageView.image? (imageView没有标签)
由于
让我更具体一点。由于每个Foo实例都在UITableViewCells中设置,我使用addTarget
[self addTarget: self action: @selector(switchImage:) forControlEvents: UIControlEventTouchDown];
然后我有这种方法来切换图像:
- (void) switchImage:(id)sender
{
selected = !selected;
imageView.image = (selected ? imageOne : imageTwo);
// self.tag in here is the indexPath.row from the foo.tag initially assigned
// NSLog(@"switchImage:%@",sender);
}
这完美无缺。我点击图像,图像切换。但是在整个tableView中,我只想要1个imageOne,其余的全部是imageTwo,所以我想要先关闭所有图像,然后打开一个。因此,我觉得我可以使用标记循环遍历所有Foo实例,以某种方式直接更改imageView.image或在每个实例中运行switchImage以关闭每个单元格的图像。
最后,当我通过NSLog查看发件人时,我发现每个Foo都有不同的地址,所以我想知道像allTargets(Foo是一个UIControl)这样的东西是否允许我使用所有的switchImage方法。
我对这个兔子洞非常深入,但如果有必要,我肯定会重新开始。
答案 0 :(得分:1)
如果我说得对,那么您尝试通过之前分配给它们的标记访问Foo
个对象(全局)。没有办法做到这一点,而不是tag
的{{1}}属性是为什么设计的。
您必须使用其他方式来访问您的Foo对象。有无数种方法可以设置访问对象的方法。由于您通常会从数据源或视图控制器访问它们,因此我会在其中添加字典。您还可以使用UIView
的{{1}}属性来仅更改实际显示的单元格上的图像。
答案 1 :(得分:1)
我同意还有其他方法可以解决这个问题,但您可以将所有Foo对象添加到数组或设置并迭代它们,直到找到具有所需标记的那个,然后通常访问imageview方式。
答案 2 :(得分:0)
我觉得有点迷失,但[UIView viewWithTag:]
怎么样?
答案 3 :(得分:0)
UIView实例具有标记属性。您可以使用以下方式从超级视图访问它们:
UIView *view = [superview viewWithTag:n];