当个人应用程序返回其根视图控制器时,在viewDidAppear:
方法中,我须要删除全部子视图。 html
我怎样才能作到这一点? ios
若是要删除UIView上的全部子视图(此处为yourView
),请在按下按钮时编写此代码: 数组
[[yourView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
对于使用autolayout的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.constraints]
由于在XCode中设置的约束被清除。 并发
编辑:感谢cocoafan :因为NSView
和UIView
不一样的方式处理事情,这种状况变得混乱。 对于NSView
(仅限桌面Mac开发),您只需使用如下内容: app
[someNSView setSubviews:[NSArray array]];
对于UIView
(仅限iOS开发),您能够安全地使用makeObjectsPerformSelector:
由于subviews
属性将返回子视图数组的副本 : spa
[[someUIView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
感谢Tommy指出makeObjectsPerformSelector:
在枚举时彷佛修改了subviews
数组(它对NSView
,但对UIView
没有)。 code
有关更多详细信息,请参阅此SO问题 。 orm
注意:使用这两种方法中的任何一种都将删除主视图包含的每一个视图并释放它们 ,若是它们未在其余地方保留的话。 从Apple关于removeFromSuperview的文档: htm
若是接收者的superview不是nil,则此方法释放接收者。 若是您计划重用该视图,请确保在调用此方法以前保留该视图,并确保在完成该视图或将其添加到另外一个视图层次结构后适当地释放它。
从根控制器获取全部子视图,并发送每一个removeFromSuperview:
NSArray *viewsToRemove = [self.view subviews]; for (UIView *v in viewsToRemove) { [v removeFromSuperview]; }
要删除全部子视图语法:
- (void)makeObjectsPerformSelector:(SEL)aSelector;
用法:
[self.View.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
此方法存在于NSArray.h文件中,并使用NSArray(NSExtendedArray)接口