1

すべてのUILabelをObjective-Cで非表示に設定する方法はありますか?ステートメントに基づいてラベルを表示および非表示にしていて、if本当にかさばるコードを書いているように感じます。すべてのUILabelをsetHidden:YESCSSに選択する方法はありますか?

編集:一度にすべてを非表示にするのではなく、一度に1つ表示する必要があります。

ありがとう!

4

2 に答える 2

2

すべてのラベルが同じビューにある場合は、そのsubviewsプロパティを使用できます。

for (UIView *subview in self.view.subviews) {
    if ([subview isKindOfClass:[UILabel class]]) {
        subview.hidden = YES;
    }
}

また、ラベル付きのビューが多数ある場合は、全体にカテゴリを追加することもできますUIView.

@interface UIView (HideLabels)

- (void)hideAllLabels:(BOOL)hide withExcludedLabel:(UILabel *)label;

@end

@implementation UIView (HideLabels)

- (void)hideAllLabels:(BOOL)hide withExcludedLabel:(UILabel *)label
{
    for (UIView *subview in self.view.subviews) {
        if (subview != label && [subview isKindOfClass:[UILabel class]]) {
            subview.hidden = YES;
        }
    }
}

@end

これを行う他の方法はありません。

編集: 上記のコードは、必要に応じて更新されました。

于 2012-09-02T03:43:09.300 に答える
1

常に1 つしか必要ない場合はUILabel、同じ を再利用できますUILabel。利点は、使用するメモリが少し少なくなり、すべての を管理する必要がないことですUILabelUILabel欠点は、 の内容を格納するために座標を再計算/格納する必要があることですUILabel(管理はこれに移行されます)。


要件が変更されたため、以下の回答は無効になりました。ただし、誰かがすべてのラベルを非表示/表示したい場合に備えて、まだそこに保持しています。

CSS のようにはできないと思いますが、トリックを使用して、すべての から へのループを回避することができUILabelますsetHidden

すべてのUILabelを透明のサブビューとして配置できUIViewます。透明のsizeとは、透明ビューを使用しない場合と座標が同じになるように構成する必要があります (混乱を避けるため)。すべての を非表示にしたい場合は、 transparent 全体を非表示にするだけです。originUIViewUILabelUIView

UILabelこれには、すべてのが既存のビューの上または下になければならないという欠点があります。これは、既存のビューの特定の要素の上にあるラベルを自由に調整したり、特定の要素の下にあるラベルを自由に調整したりできないことを意味します。そのために別のビューを作成する必要があります。

于 2012-09-02T03:41:21.797 に答える