Quiero agregar una vista secundaria y eliminarla con un toque. Este es mi codigo:
/ * Para agregar subvista * /
var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
testView.backgroundColor = UIColor.blueColor()
testView.alpha = 0.5
testView.tag = 100
super.view.userInteractionEnabled = false
self.view.userInteractionEnabled = true
self.view.addSubview(testView)
/ * Para eliminar subvista * /
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let touch = touches.anyObject() as UITouch
let point = touch.locationInView(self.view)
if(testView.tag==100){
println("Tag 100")
testView.removeFromSuperview()
}
else{
println("tag not found")
}
}
Pero eliminarlo no funciona. ¿Alguien puede ayudarme, por favor? ¡Gracias!
Respuestas:
Gracias por la ayuda. Esta es la solución: creé la subvista y agrego un gesto para eliminarla
@IBAction func infoView(sender: UIButton) { var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568)) testView.backgroundColor = UIColor.blueColor() testView.alpha = 0.5 testView.tag = 100 testView.userInteractionEnabled = true self.view.addSubview(testView) let aSelector : Selector = "removeSubview" let tapGesture = UITapGestureRecognizer(target:self, action: aSelector) testView.addGestureRecognizer(tapGesture) } func removeSubview(){ println("Start remove sibview") if let viewWithTag = self.view.viewWithTag(100) { viewWithTag.removeFromSuperview() }else{ println("No!") } }
Actualizar:
Swift 3+
@IBAction func infoView(sender: UIButton) { let testView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568)) testView.backgroundColor = .blue testView.alpha = 0.5 testView.tag = 100 testView.isUserInteractionEnabled = true self.view.addSubview(testView) let aSelector : Selector = #selector(GasMapViewController.removeSubview) let tapGesture = UITapGestureRecognizer(target:self, action: aSelector) testView.addGestureRecognizer(tapGesture) } func removeSubview(){ print("Start remove sibview") if let viewWithTag = self.view.viewWithTag(100) { viewWithTag.removeFromSuperview() }else{ print("No!") } }
fuente
Tienes que usar la
viewWithTag
función para encontrar la vista con el dadotag
.override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { let touch = touches.anyObject() as UITouch let point = touch.locationInView(self.view) if let viewWithTag = self.view.viewWithTag(100) { print("Tag 100") viewWithTag.removeFromSuperview() } else { print("tag not found") } }
fuente
Suponiendo que tenga acceso a él a través de puntos de venta o código programático, puede eliminarlo haciendo referencia a su vista
foo
y alremoveFromSuperview
métodofuente
Tengo una vista dentro de mi CollectionViewCell personalizada e incrustando un gráfico en esa vista. Para actualizarlo, tengo que verificar si ya hay un gráfico colocado en esa vista, eliminarlo y luego aplicar uno nuevo. Esta es la solucion
cell.cellView.addSubview(graph) graph.tag = 10
ahora, en el bloque de código donde desea eliminarlo (en su caso, gestoRecognizerFunction)
if let removable = cell.cellView.viewWithTag(10){ removable.removeFromSuperview() }
para incrustarlo de nuevo
cell.cellView.addSubview(graph) graph.tag = 10
fuente
Probé este código usando XCode 8 y Swift 3
Para agregar una vista personalizada a SuperView, use:
self.view.addSubview(myView)
Para quitar la vista personalizada de Superview use:
self.view.willRemoveSubview(myView)
fuente