0

私はたくさんのビューを持っていますが、それぞれにまったく同じ 2 つのラベルがあります。ラベルはすべて、各ビューで 1 と 2 のタグが付けられています。

今、私はIBOutletCollection前に使用していなかったし、これらのビューのそれぞれへの参照を持っていました (これは不要でした)、次のようにビューのラベルへの参照を取得していました:

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

self.labelViews には、UILabel ではない UIView が隠されています。

投稿したコードで、次を変更できます。

@property (強力、非アトミック) IBOutletCollection(UIView) NSArray *labelViews;

読むべき

@property (強力、非アトミック) IBOutletCollection(UILabel) NSArray *labelViews;

于 2013-06-10T14:42:03.147 に答える
0

OK、問題が見つかりました。申し訳ありませんが、ここにいる誰も見つけられなかったものです。このプロジェクトのどこかで、ビューが 0、1、2、3 などに設定されていると、何かによってビューが変更されます (自分のものではないプロジェクトでメンテナンスを行っているのはまだわかりません)。そのため、タグを次のようなランダムなものに設定します900,901...などで直ったようです。

于 2013-06-10T15:23:03.040 に答える