當個人應用程序返回其根視圖控制器時,在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)接口