Chcę dodać widok podrzędny i usunąć jednym dotknięciem. To jest mój kod:
/ * Aby dodać widok podrzędny * /
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)
/ * Aby usunąć widok podrzędny * /
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")
}
}
Ale usunięcie to nie działa. Ktoś może mi pomóc, proszę? Dzięki!
Odpowiedzi:
Dzięki za pomoc. Oto rozwiązanie: stworzyłem podwidok i dodaję gest, aby go usunąć
@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!") } }
Aktualizacja:
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!") } }
źródło
Musisz użyć
viewWithTag
funkcji, aby znaleźć widok z podanymtag
.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") } }
źródło
Zakładając, że masz do niego dostęp za pośrednictwem punktów sprzedaży lub kodu programistycznego, możesz go usunąć, odwołując się do swojego widoku
foo
iremoveFromSuperview
metodyźródło
Mam widok wewnątrz mojej niestandardowej CollectionViewCell i osadzam wykres w tym widoku. Aby go odświeżyć, muszę sprawdzić, czy na tym widoku jest już umieszczony wykres, usunąć go, a następnie zastosować nowy. Oto rozwiązanie
cell.cellView.addSubview(graph) graph.tag = 10
teraz w bloku kodu, w którym chcesz go usunąć (w twoim przypadku gestRecognizerFunction)
if let removable = cell.cellView.viewWithTag(10){ removable.removeFromSuperview() }
aby ponownie go osadzić
cell.cellView.addSubview(graph) graph.tag = 10
źródło
Przetestowano ten kod przy użyciu XCode 8 i Swift 3
Aby dodać widok niestandardowy do SuperView użyj:
self.view.addSubview(myView)
Aby usunąć widok niestandardowy z funkcji Superview:
self.view.willRemoveSubview(myView)
źródło