2012-08-09 14 views
78

私は多分このような何かがうまくいくかもしれない考えていた。self.viewからすべてのサブビューを削除する最良の方法は何ですか?

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

私はサブビューのすべての種類を削除します。 UIImages、Buttons、Textfieldsなど。

+1

これでうまくいきます。サブビューの階層が複数ある場合は、再帰的に行う必要があるかもしれません。私はあなたがこれをしたいと思っているのか分かりません。 – Dustin

+0

それは動作しますか?私は 'b'がすぐに' subviews'配列から削除され、高速列挙ループ内で突然変異を引き起こしたと考えました。これは禁止されています。 – Mazyod

+2

@Mazyodチェックサブビュープロパティ:@property(非原子、読み取り専用、コピー)NSArray *サブビュー - コピーとして宣言されているので、サブビューを削除するときにその配列を変更しません。 – Max

答えて

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

これはあなたの亜種と同じですが、少し短くなりました。

+0

これ以外の方法は同じですか? @Mazyod – Hemang

+0

makeObjectsPerformSelectorとサブビューを削除するための手動ループの間に(パフォーマンスによって)違いはありますか? – Ganesh

6

スウィフト:スウィフトで

extension UIView { 
    func removeAllSubviews() { 
     for subview in subviews { 
      subview.removeFromSuperview() 
     } 
    } 
} 
13
self.view.subviews.forEach({ $0.removeFromSuperview() }) 

同一バージョン。

1

あなたはこの

//adding an object to the view 
view.addSubView(UIButton()) 

// you can remove any UIControls you have added with this code 
view.subviews.forEach { (item) in 
    item.removeFromSuperview() 
} 

ビューのように使用することができますあなたがからすべてを削除する図です。 forEachを実行するだけで、すべてのサブビューを削除しています。

+0

答えを広げることができますか? –

+0

これを反復処理している間、これをコレクションに変更していませんか? – mixtly87

関連する問題