Скрыть объекты UIView

У меня есть UIView, у которого есть n количество подзонов. Пусть говорят n как 600 subviews. Я знаю, что есть способ скрыть все подзадачи по следующему коду

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

Но есть ли какой-либо другой правильный способ или API, чтобы скрыть все subviews.Thanks заранее.

Ответ 1

Objective-C (KVC)

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

Swift:

mainView.subviews.forEach { $0.isHidden = true }

Ответ 2

Если вы хотите скрыть все 600 подзонов без создания цикла for, я думаю, что есть еще один простой способ. Посмотрите документацию для скрытого свойства UIView. В нем говорится:

Скрытый вид исчезает из окна и не принимает входные события. Тем не менее, он остается в своём списке супервизоров, и участвует в авторезистировании, как обычно. Скрытие представления с помощью subviews приводит к скрытию этих подзонов и любых потомков представлений, которые они могут иметь. Этот эффект неявный и не изменяет скрытое состояние потомков получателей.

Итак, сделайте UIView (позвоните ему containerView) и сделайте его подвид вашего основного экрана. Затем возьмите все свои подзоны 600 и сделайте их subviews containerView, а не вашего mainView. Теперь вы можете скрыть все 600 подзонов (а также containerView) одной простой строкой:

mainView.containerView.hidden=YES;

Ваш mainView останется видимым, конечно.