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

Iphone 如何使用类的标记引用类的实例?,iphone,Iphone,我有几个正在实例化的UIControl类Foo实例,一个实例对应于UITableView中的每个单元格。该班有: BOOL selected; UIImageView *imageView; UIImage *imageOne; UIImage *imageTwo; 我已为每个实例指定了一个标记: foo.tag = indexPath.row; 现在,我想通过其标记引用UIImageView.image以获得一个(或多个)特定实例,从而将其切换到另一个图像 在我的搜索中,我看到了一些事情,

我有几个正在实例化的UIControl类Foo实例,一个实例对应于UITableView中的每个单元格。该班有:

BOOL selected;
UIImageView *imageView;
UIImage *imageOne;
UIImage *imageTwo;
我已为每个实例指定了一个标记:

foo.tag = indexPath.row;
现在,我想通过其标记引用UIImageView.image以获得一个(或多个)特定实例,从而将其切换到另一个图像

在我的搜索中,我看到了一些事情,比如使用initWithTag为类分配标记(我假设它们正在分配标记)

…但我还没有看到该标记后来是如何引用它们的

我看到了一个对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中,我只想要一个imageOne,其余的都是imageTwo,所以我想要一种方法,首先关闭所有图像,然后打开一个。因此,我觉得我可以使用标记来循环遍历Foo的所有实例,以某种方式直接更改imageView.image,或者在每个实例中运行switchImage来关闭每个单元格的图像

最后,当我通过NSLog查看发件人时,我看到每个Foo都有不同的地址,所以我想知道像allTargets(Foo是一个UIControl)这样的东西是否允许我访问所有switchImage方法


我已经深入到这个兔子洞里了,但如果有必要,我肯定会重新开始。

我觉得有点迷茫,但是呢?

UIView实例有一个标记属性。您可以使用以下方式从其superview访问它们:

UIView *view = [superview viewWithTag:n];

如果我没记错的话,您可以尝试通过之前分配给对象的标记来访问
Foo
对象(全局)。没有办法做到这一点,而且这不是
UIView
s的
tag
属性的设计目的


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

我同意有其他方法来处理此问题,但您可以将所有Foo对象添加到数组或集合中,并对其进行迭代,直到找到带有所需标记的对象为止,然后以通常的方式访问imageview。

我知道我可以为imageview分配一个标记,我正在进行这项工作,但将标记分配给类的实例并不像我所做的那样容易,因此我需要一种通过类的标记访问imageview的方法,但让我看看这是否可行,如果可行,我将更努力地分配imageView标记。谢谢。我知道我可以给imageView分配一个标记,我正在努力,但是给类的实例分配一个标记并不像我所做的那样容易,所以我需要一种通过类的标记访问imageView的方法。请参阅下面我的答案,了解更多详细信息。我试图保持它的简单,但我认为额外的细节是必要的澄清。谢谢。请看我下面的答案和更多细节。我试图保持它的简单,但我认为额外的细节是必要的澄清。谢谢。我坚持我的建议。将每个Foo对象添加到一个数组中(如果可以通过标记进行索引,则可以节省一些工作),并在数组中迭代,为每个对象调用switchImage。您可以测试每个对象的标记,而不更改(或双重更改?我不完全清楚下面的设置)您想要的标记。只是不可能按照您希望的方式通过标记直接访问对象。我开始同意您的方法。我只是在读一些书,看看如何做到这一点,但到目前为止,我读到的内容开始觉得像是一个解决方案。我相信我会弄明白的,但任何参考资料或更多细节都将不胜感激。谢谢,很好用。将imageView放在一个数组中,然后循环通过以关闭它们。非常感谢。不仅仅是一个解决方案,你给了我周末剩下的时间去玩。
UIView *view = [superview viewWithTag:n];