Удалить все подпредставления?

Когда мое приложение возвращается к своему корневому контроллеру представления, в viewDidAppear: метод я должен удалить все подпредставления.

Как я могу сделать это?

312
задан Timo Salomäki 15 February 2019 в 04:44
поделиться

2 ответа

Редактировать: С благодарностью Cocoafan : Эта ситуация запутана тем, что NSView и UIVIEW обрабатывать вещи по-разному. Для NSView (только для разработки MAC на рабочем столе), вы можете просто использовать следующее:

[someNSView setSubviews:[NSArray array]];

для UIVIEW (только разработка iOS), вы можете безопасно использовать MakeObjectsPerformFelector: Поскольку свойство , недвижимость вернет копию массива субвейвейций:

[[someUIView subviews]
 makeObjectsPerformSelector:@selector(removeFromSuperview)];

Спасибо TOMMY для указывания, что MaDobjectSperformFelector: , по-видимому, изменяет массив , пока он перечисляется (который он делает для NSView , но не для UIVIEW ).

Пожалуйста, смотрите этот вопрос для более подробной информации.

Примечание: Использование любого из этих двух методов удалит каждый представление о том, что ваш главный вид содержит и выпустить их , если они не сохраняются в другом месте. Из документации Apple на RemoveFromsuperview :

Если руководитель приемника не является NIL, этот метод выпускает приемник. Если вы планируете повторно использовать вид, обязательно сохраните его перед вызовом этого метода и обязательно отпустите его в зависимости от обстоятельств, когда вы закончите с ним или после добавления его к другой иерархии.

567
ответ дан 23 November 2019 в 01:10
поделиться

Получите все субпроизводитеки из вашего корневого контроллера и отправьте каждому удаленномуфрумсубенно:

NSArray *viewsToRemove = [self.view subviews];
for (UIView *v in viewsToRemove) {
    [v removeFromSuperview];
}
171
ответ дан 23 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: