Saya berpikir mungkin sesuatu seperti ini mungkin berhasil:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Saya ingin menghapus setiap jenis subview. UIImages, Buttons, Textfields dll.
iphone
objective-c
ios
uikit
dgund
sumber
sumber
b
akan segera dihapus darisubviews
array, menyebabkan mutasi dalam loop enumerasi cepat, yang dilarang.copy
specifier berarti bahwa hal itu membuat salinan ketika diatur ; tidak ada yang ditentukan tentang mendapatkan. Kemungkinan besar salinan dikembalikan, tetapi itu bukan bagian dari definisi properti.Jawaban:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
Ini identik dengan varian Anda, tetapi sedikit lebih pendek.
sumber
self.view.subviews.forEach({ $0.removeFromSuperview() })
Versi identik di Swift.
sumber
Cepat:
extension UIView { func removeAllSubviews() { for subview in subviews { subview.removeFromSuperview() } } }
sumber
Anda bisa menggunakan seperti ini
//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() }
view adalah tampilan yang ingin Anda hapus semuanya. Anda hanya menghapus setiap subview dengan melakukan forEach
sumber
Untuk Swift 4 +. Anda dapat membuat ekstensi ke
UIView
. Sebut saja bila perlu.extension UIView { func removeAllSubviews() { subviews.forEach { $0.removeFromSuperview() } } }
sumber