Ответ 1
Objective-C (KVC)
[mainView.subviews setValue:@YES forKeyPath:@"hidden"];
Swift:
mainView.subviews.forEach { $0.isHidden = true }
У меня есть UIView, у которого есть n количество подзонов. Пусть говорят n как 600 subviews. Я знаю, что есть способ скрыть все подзадачи по следующему коду
for (UIView *subView in mainView.subviews) {
subView.hidden = YES;
}
Но есть ли какой-либо другой правильный способ или API, чтобы скрыть все subviews.Thanks заранее.
Objective-C (KVC)
[mainView.subviews setValue:@YES forKeyPath:@"hidden"];
Swift:
mainView.subviews.forEach { $0.isHidden = true }
Если вы хотите скрыть все 600 подзонов без создания цикла for, я думаю, что есть еще один простой способ. Посмотрите документацию для скрытого свойства UIView. В нем говорится:
Скрытый вид исчезает из окна и не принимает входные события. Тем не менее, он остается в своём списке супервизоров, и участвует в авторезистировании, как обычно. Скрытие представления с помощью subviews приводит к скрытию этих подзонов и любых потомков представлений, которые они могут иметь. Этот эффект неявный и не изменяет скрытое состояние потомков получателей.
Итак, сделайте UIView (позвоните ему containerView) и сделайте его подвид вашего основного экрана. Затем возьмите все свои подзоны 600 и сделайте их subviews containerView, а не вашего mainView. Теперь вы можете скрыть все 600 подзонов (а также containerView) одной простой строкой:
mainView.containerView.hidden=YES;
Ваш mainView останется видимым, конечно.