0

我有一堆视图,每个视图中都有 2 个完全相同的标签。标签在每个视图中都标记为 1 和 2。

现在我没有使用IBOutletCollectionbefore 并且引用了这些视图中的每一个(这是不必要的)并且正在获取对视图中标签的引用,如下所示:

l1 = (UILabel*)[_labels4 viewWithTag:1]; //_labels4 is a UIView with 2 labels in it
l2 = (UILabel*)[_labels4 viewWithTag:2];

效果很好,但是代码变得臃肿,所以我想开始使用一个,IBOutletCollection这样我就可以使用 for 循环遍历所有视图

所以当我这样做时,它似乎工作正常,除了标签现在变成UIViews而不是UILabels

for(UIView *view in self.labelViews){ //self.labelViews is the collection of UIViews aka _labels4 + others

    UILabel *l1 = (UILabel*)[view viewWithTag:1];
    UILabel *l2 = (UILabel*)[view viewWithTag:2];

    l2.text = @"Reference"; //crash because unrecognised selector 'setText' sent to UIView
}

有人知道为什么吗?你可以在这里查看一些更详细的代码

帮助消除误解:

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

0

好的,找到了问题,抱歉,这里的任何人都没有发现任何问题。在这个项目中的某个地方,将视图设置为 0、1、2、3 等会导致它们被某些东西修改(不确定是什么,我正在对一个不是我自己的项目进行维护)所以将标签设置为随机的东西900,901 ...等似乎解决了它。

于 2013-06-10T15:23:03.040 回答
0

在您的 self.labelViews 中有一个 UIView 隐藏在那里,它不是 UILabel

在您发布的代码中,您可以更改以下内容:

@property(强,非原子) IBOutletCollection(UIView) NSArray *labelViews;

应该读

@property (强,非原子) IBOutletCollection(UILabel) NSArray *labelViews;

于 2013-06-10T14:42:03.147 回答