Удалить все подпредставления? - PullRequest
308 голосов
/ 28 января 2010

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

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

Ответы [ 15 ]

1 голос
/ 15 августа 2018
view.subviews.forEach { $0.removeFromSuperview() }
1 голос
/ 05 февраля 2014

Чтобы удалить все подпредставления Синтаксис:

- (void)makeObjectsPerformSelector:(SEL)aSelector;

Использование:

[self.View.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

Этот метод присутствует в файле NSArray.h и использует интерфейс NSArray (NSExtendedArray)

0 голосов
/ 19 октября 2016

В monotouch / xamarin.ios это сработало для меня:

SomeParentUiView.Subviews.All(x => x.RemoveFromSuperview);
0 голосов
/ 24 февраля 2014

Чтобы удалить все подпредставления из суперпредставлений:

NSArray *oSubView = [self subviews];
for(int iCount = 0; iCount < [oSubView count]; iCount++)
{
    id object = [oSubView objectAtIndex:iCount];
    [object removeFromSuperview];
    iCount--;
}
0 голосов
/ 31 июля 2013

Для ios6, использующего autolayout, мне пришлось добавить немного кода, чтобы снять ограничения.

NSMutableArray * constraints_to_remove = [ @[] mutableCopy] ;
for( NSLayoutConstraint * constraint in tagview.constraints) {
    if( [tagview.subviews containsObject:constraint.firstItem] ||
       [tagview.subviews containsObject:constraint.secondItem] ) {
        [constraints_to_remove addObject:constraint];
    }
}
[tagview removeConstraints:constraints_to_remove];

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

Я уверен, что есть лучший способ сделать это, но у меня это сработало. В моем случае я не мог использовать прямой [tagview removeConstraints:tagview.constraints], так как в XCode были установлены ограничения, которые очищались.

...