ฉันคิดว่าสิ่งนี้อาจใช้งานได้:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
ฉันต้องการลบมุมมองย่อยทุกประเภท UIImages, ปุ่ม, Textfields ฯลฯ
ฉันคิดว่าสิ่งนี้อาจใช้งานได้:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
ฉันต้องการลบมุมมองย่อยทุกประเภท UIImages, ปุ่ม, Textfields ฯลฯ
b
จะถูกลบออกจากsubviews
อาร์เรย์ทันทีทำให้เกิดการกลายพันธุ์ภายในลูปการแจงนับอย่างรวดเร็วซึ่งเป็นสิ่งต้องห้าม
copy
ระบุหมายถึงว่ามันทำให้สำเนาเมื่อตั้ง ; ไม่มีการระบุเกี่ยวกับการรับ มีความเป็นไปได้สูงมากที่จะส่งคืนสำเนา แต่นั่นไม่ใช่ส่วนหนึ่งของนิยามคุณสมบัติ
คำตอบ:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
เหมือนกับตัวแปรของคุณ แต่สั้นกว่าเล็กน้อย
self.view.subviews.forEach({ $0.removeFromSuperview() })
เวอร์ชันที่เหมือนกันใน Swift
รวดเร็ว:
extension UIView {
func removeAllSubviews() {
for subview in subviews {
subview.removeFromSuperview()
}
}
}
คุณสามารถใช้เช่นนี้
//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()
}
มุมมองคือมุมมองที่คุณต้องการลบทุกอย่างออก คุณแค่ลบทุก subview โดยทำ forEach
สำหรับ Swift 4 + คุณสามารถขยายไปยังUIView
ไฟล์. เรียกใช้เมื่อจำเป็น
extension UIView {
func removeAllSubviews() {
subviews.forEach { $0.removeFromSuperview() }
}
}