@7j7

Как выполнить цикл дочерних значений?

Доброе время суток, нужно перебрать и удалить все дочерние элементы, сейчас у меня есть вот такой ужас:

for view1 in self._searchBackground.subviews {
    for view2 in view1.subviews {
        for view3 in view2.subviews {
            for view4 in view3.subviews {
                for view5 in view4.subviews {
                    for view6 in view5.subviews {
                        view6.removeFromSuperview()
                    }
                    view5.removeFromSuperview()
                }
                view4.removeFromSuperview()
            }
            view3.removeFromSuperview()
        }
        view2.removeFromSuperview()
    }
    view1.removeFromSuperview()
}
self._searchBackground.removeFromSuperview()


как можно реализовать в функцию, написано на языке swift, можно примеры и на другом любом или может есть уже какие нибудь решения. Просто каждый раз добавлять ветку накладно будет сильно.

П.С. Заранее благодарю!!!
  • Вопрос задан
  • 2385 просмотров
Пригласить эксперта
Ответы на вопрос 3
@SlivTime
Используйте рекурсию. Со swift я не знаком, но на Питоне сделал бы что-нибудь подобное:
def remove_children_subviews(view):
    view.remove_from_superview()
    children = getattr(view, 'subviews', [])
    map(remove_children_subviews, children)
Ответ написан
Комментировать
Flanker_4
@Flanker_4
Я не вижу смысла удалять все subviews и у дочерних элементов, имхо хватит только верхнего , т.е. что-то такое
[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
Но если нужно уж все то как-то так.
-(void) removeSubviews:(UIView*) view{
     for (UIView *child in view.subview){
           [self removeSubviews:child];
     }
     [view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
Ответ написан
AxisPod
@AxisPod
- Папа, папа, а деструкторы существуют?
- Нет сынок, это фантастика.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы