Когда мое приложение возвращается к своему корневому контроллеру представления, в viewDidAppear:
метод я должен удалить все подпредставления.
Как я могу сделать это?
Редактировать: С благодарностью Cocoafan : Эта ситуация запутана тем, что NSView
и UIVIEW
обрабатывать вещи по-разному. Для NSView
(только для разработки MAC на рабочем столе), вы можете просто использовать следующее:
[someNSView setSubviews:[NSArray array]];
для UIVIEW
(только разработка iOS), вы можете безопасно использовать MakeObjectsPerformFelector:
Поскольку свойство
, недвижимость вернет копию массива субвейвейций:
[[someUIView subviews]
makeObjectsPerformSelector:@selector(removeFromSuperview)];
Спасибо TOMMY для указывания, что MaDobjectSperformFelector:
, по-видимому, изменяет массив
, пока он перечисляется (который он делает для NSView
, но не для UIVIEW
).
Пожалуйста, смотрите этот вопрос для более подробной информации.
Примечание: Использование любого из этих двух методов удалит каждый представление о том, что ваш главный вид содержит и выпустить их , если они не сохраняются в другом месте. Из документации Apple на RemoveFromsuperview :
Если руководитель приемника не является NIL, этот метод выпускает приемник. Если вы планируете повторно использовать вид, обязательно сохраните его перед вызовом этого метода и обязательно отпустите его в зависимости от обстоятельств, когда вы закончите с ним или после добавления его к другой иерархии.
Получите все субпроизводитеки из вашего корневого контроллера и отправьте каждому удаленномуфрумсубенно:
NSArray *viewsToRemove = [self.view subviews];
for (UIView *v in viewsToRemove) {
[v removeFromSuperview];
}