Estoy buscando un método simple para eliminar a la vez todas las subvistas de una supervista en lugar de eliminarlas una por una.
//I'm trying something like this, but is not working
let theSubviews : Array = container_view.subviews
for (view : NSView) in theSubviews {
view.removeFromSuperview(container_view)
}
¿Qué me estoy perdiendo?
ACTUALIZAR
Mi aplicación tiene una principal container_view
. Tengo que agregar otras vistas diferentes como subvistas container_view
para proporcionar una especie de navegación.
Entonces, cuando hago clic en el botón para "abrir" una página en particular, necesito eliminar todas las subvistas y agregar una nueva.
ACTUALIZACIÓN 2: una solución de trabajo (OS X)
Supongo que Apple lo arregló.
Ahora es más fácil que nunca, solo llame:
for view in containerView.subviews{
view.removeFromSuperview()
}
Respuestas:
EDITAR: (gracias Jeremiah / Rollo)
Con mucho, la mejor manera de hacer esto en Swift para iOS es:
^^ ¡Estas características son divertidas!
//// FIN EDITAR
Solo haz esto:
O si estás buscando una clase específica
fuente
result of call to 'map' is unused
no es un error.Array.map
en la mayoría de los idiomas devolverá la matriz modificada. Sería el método equivalente que no devuelve una matrizview.subviews.forEach
.for view:CustomViewClass! in self.view.subviews where view.isKindOfClass(CustomViewClass) { view.doClassThing() }
Para iOS / Swift, para deshacerme de todas las subvistas que uso:
para deshacerme de todas las subvistas de una clase particular (como UILabel) utilizo:
fuente
El código se puede escribir más simple de la siguiente manera.
fuente
Esta debería ser la solución más simple.
(ver ¿ Eliminar todas las subvistas? para otros métodos)
Tenga en cuenta que esta es una pregunta de MacOS y esta respuesta solo funciona para MacOS . No funciona en iOS.
fuente
NSView
(OS X) yUIView
(iOS).NSView
, no para iOS yUIView
. Solo a las personas no les importa leer la pregunta y las etiquetas, por lo tanto, se llenó de respuestas iOS.No sé si logró resolver esto, pero recientemente he tenido un problema similar en el que el bucle For dejó una vista cada vez. Descubrí que esto se debía a que self.subviews estaba mutado (tal vez) cuando se llamó a removeFromSuperview ().
Para arreglar esto hice:
Al hacer .copy (), podría realizar la eliminación de cada subvista mientras mutaba la matriz self.subviews. Esto se debe a que la matriz copiada (subViews) contiene todas las referencias a los objetos y no está mutada.
EDITAR: en su caso, creo que usaría:
fuente
let subViewsArray: Array = (parentView.subviews as NSArray).copy() as Array<NSView>
Prueba esto:
fuente
Extensión para eliminar todas las subvistas, se elimina rápidamente.
fuente
Prueba esto:
ACTUALIZACIÓN : Si te sientes aventurero, puedes hacer una extensión en la UIView como se muestra a continuación:
Y llámalo así:
fuente
En xcodebeta6 esto funcionó.
fuente
Escribí esta extensión:
Para que pueda usar self.view.lf_removeAllSubviews en un UIViewController. Pondré esto en la versión rápida de mi https://github.com/superarts/LFramework más tarde, cuando tenga más experiencia en swift (1 día de experiencia hasta ahora, y sí, para la API, dejé el guión bajo).
fuente
Swift 3
Si agrega una etiqueta a su vista, puede eliminar una vista específica.
fuente
view.subviews.filter({$0.tag != 321}).forEach({$0.removeFromSuperview()})
?Swift 5
Creo 2 métodos diferentes para eliminar la subvista. Y es mucho más fácil de usar si los ponemos en
extension
fuente
Su sintaxis está ligeramente apagada. Asegúrate de emitir explícitamente.
fuente
Tienes que intentarlo
fuente
Para eliminar solo subvistas de una clase específica, este fue el único código Swift que funcionó para mí en Xcode6.1.1. Suponiendo que las únicas subvistas que desea eliminar son de tipo UIButton ...
fuente
Un trazador de líneas:
Creo que este enfoque es más legible que los "one-liners" usando map o forEach . El foreach y el mapa cortos pueden ser difíciles de entender, ya que la lógica es más abstracta.
fuente
Para Swift 3
Hice lo siguiente porque solo eliminar de la supervista no borró los botones de la matriz.
fuente
Prueba esto, probé esto:
fuente
por
Swift 4.+
Espero que este sea el uso completo para ti.
fuente
intentaste algo como
fuente