如何使用其标记引用类的实例?

时间:2010-05-02 14:30:44

标签: iphone

我有几个实例化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方法。

我对这个兔子洞非常深入,但如果有必要,我肯定会重新开始。

4 个答案:

答案 0 :(得分:1)

如果我说得对,那么您尝试通过之前分配给它们的标记访问Foo个对象(全局)。没有办法做到这一点,而不是tag的{​​{1}}属性是为什么设计的。

您必须使用其他方式来访问您的Foo对象。有无数种方法可以设置访问对象的方法。由于您通常会从数据源或视图控制器访问它们,因此我会在其中添加字典。您还可以使用UIView的{​​{1}}属性来仅更改实际显示的单元格上的图像。

答案 1 :(得分:1)

我同意还有其他方法可以解决这个问题,但您可以将所有Foo对象添加到数组或设置并迭代它们,直到找到具有所需标记的那个,然后通常访问imageview方式。

答案 2 :(得分:0)

我觉得有点迷失,但[UIView viewWithTag:]怎么样?

答案 3 :(得分:0)

UIView实例具有标记属性。您可以使用以下方式从超级视图访问它们:

UIView *view = [superview viewWithTag:n];