16

n 個のサブビューを持つ UIView があります。n を 600 サブビューとします。次のコードですべてのサブビューを非表示にする方法があることを知っています

for (UIView *subView in mainView.subviews) {
subView.hidden = YES;
}

しかし、すべてのサブビューを非表示にする他の適切な方法または API はありますか。事前に感謝します。

4

2 に答える 2

41

Objective-C (KVC)

[mainView.subviews setValue:@YES forKeyPath:@"hidden"];

迅速:

mainView.subviews.forEach { $0.isHidden = true }
于 2013-10-17T18:49:08.723 に答える
15

for ループを作成せずに 600 個のサブビューをすべて非表示にする場合は、別の簡単な方法もあると思います。UIViewの隠しプロパティのドキュメントを見てください。それは言います:

非表示のビューはウィンドウから消え、入力イベントを受け取りません。ただし、スーパービューのサブビューのリストに残り、通常どおり自動サイズ変更に参加します。サブビューを含むビューを非表示にすると、それらのサブビューとそれらが持つ可能性のあるビューの子孫を非表示にする効果があります。この効果は暗黙的であり、受信者の子孫の非表示状態を変更しません。

したがって、UIView (containerView と呼びましょう) を作成し、それを mainView のサブビューにします。次に、600 個のサブビューをすべて取得し、mainView ではなく、containerView のサブビューにします。600 個のサブビューすべて (および containerView) を 1 行で非表示にできるようになりました。

mainView.containerView.hidden=YES;

もちろん、mainView は引き続き表示されます。

于 2013-10-18T01:17:24.263 に答える