当我的应用程序回到它的根视图控制器,在viewDidAppear:方法中,我需要删除所有子视图。

我该怎么做呢?


当前回答

为了从父视图中移除所有子视图:

NSArray *oSubView = [self subviews];
for(int iCount = 0; iCount < [oSubView count]; iCount++)
{
    id object = [oSubView objectAtIndex:iCount];
    [object removeFromSuperview];
    iCount--;
}

其他回答

对于使用自动布局的ios6,我不得不添加一些代码来消除限制。

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。因为在XCode中设置了一些被清除的约束。

使用以下代码删除所有子视图。

for (UIView *view in [self.view subviews]) 
{
 [view removeFromSuperview];
}

如果你想移除UIView(这里是yourView)上的所有子视图,那么在你的按钮点击处写以下代码:

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

如果你正在使用Swift,它就像:

subviews.map { $0.removeFromSuperview }

它在理念上与makeObjectsPerformSelector方法相似,但是具有更多的类型安全性。

从你的根控制器获取所有的子视图,并给每个子视图发送一个removeFromSuperview:

NSArray *viewsToRemove = [self.view subviews];
for (UIView *v in viewsToRemove) {
    [v removeFromSuperview];
}