Swift fügt eine Ansicht hinzu und entfernt sie

81

Ich möchte eine Unteransicht hinzufügen und mit einem Fingertipp entfernen. Das ist mein Code:

/ * Unteransicht hinzufügen * /

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)

/ * Unteransicht entfernen * /

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")
    }

}

Aber das Entfernen funktioniert nicht Jemand kann mir bitte helfen? Vielen Dank!

Dasoga
quelle
Was bedeutet "nicht funktionieren"? Das Hinzufügen? Das Entfernen? Fehler? Bitte bearbeiten Sie Ihre Frage, um weitere Informationen aufzunehmen.
ABMagil
1
testView ist die Ansicht mit dem Tag 100, nicht self.view, sodass Ihre if-Anweisung niemals ausgeführt wird.
Rdelmar
Danke für die Antwort. Es ist jetzt bearbeitet
Dasoga

Antworten:

99

Danke für die Hilfe. Dies ist die Lösung: Ich habe die Unteransicht erstellt und eine Geste hinzugefügt, um sie zu entfernen

@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!")
    }
}

Aktualisieren:

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!")
    }
}
Dasoga
quelle
73

Sie müssen die viewWithTagFunktion verwenden, um die Ansicht mit der angegebenen zu finden tag.

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")
    }
}
Rakeshbs
quelle
Vielen Dank! Eigentlich hat das mein Problem gelöst. Aber die Interaktion mit de super view wird nicht deaktiviert. Wie kann ich die Interaktion mit der Superansicht deaktivieren?
Dasoga
Ich habe es nicht verstanden Welche Interaktion mit der Übersicht?
Rakeshbs
Ich habe eine Tippgeste in der ersten Ansicht, nachdem ich mit einer Schaltfläche eine Unteransicht hinzugefügt habe, aber es ist nur eine Informationsansicht, also möchte ich sie mit einem Tipp entfernen. Jetzt funktioniert der Entnahmehahn. Aber in der ersten Ansicht erhalte ich den gleichen Tipp, ich muss diesen Tipp deaktivieren ... danke !!
Dasoga
Wo möchten Sie tippen, um die Informationsansicht zu entfernen? Möchten Sie die Ansicht entfernen, wenn die Informationsansicht innen und nicht außen angetippt wird?
Rakeshbs
Ja, wenn der Benutzer auf die Informationsansicht (zweite Ansicht) tippt, möchte ich diese Ansicht entfernen (zweite Ansicht) und die erste Ansicht erneut anzeigen.
Dasoga
2

Angenommen, Sie haben Zugriff über Steckdosen oder Programmcode, können Sie ihn entfernen, indem Sie auf Ihre Ansicht foound die removeFromSuperviewMethode verweisen

foo.removeFromSuperview()
Kunst
quelle
0

Ich habe eine Ansicht in meiner benutzerdefinierten CollectionViewCell und binde ein Diagramm in diese Ansicht ein. Um es zu aktualisieren, muss ich überprüfen, ob in dieser Ansicht bereits ein Diagramm platziert ist, es entfernen und dann neu anwenden. Hier ist die Lösung

cell.cellView.addSubview(graph)
graph.tag = 10

Jetzt im Codeblock, in dem Sie es entfernen möchten (in Ihrem Fall gestureRecognizerFunction).

if let removable = cell.cellView.viewWithTag(10){
   removable.removeFromSuperview()
}

um es wieder einzubetten

cell.cellView.addSubview(graph)
graph.tag = 10
Muhammad Hamza Munir
quelle
-9

Testete diesen Code mit XCode 8 und Swift 3

So fügen Sie SuperView eine benutzerdefinierte Ansicht hinzu:

self.view.addSubview(myView)

So entfernen Sie die benutzerdefinierte Ansicht aus der Übersicht:

self.view.willRemoveSubview(myView)

Pravin Kamble
quelle
8
willRemoveSubview entfernt die Unteransicht nicht aus der Übersicht. Es wird nur angezeigt, wann die Unteransicht entfernt werden soll.
Murat Yasar
3
Um eine benutzerdefinierte Ansicht aus der Übersicht zu entfernen, sollte man myView.removeFromSuperview ()
Yaroslav Bai
1
willRemoveSubview entfernt die Unteransicht nicht aus der Übersicht.
Imtee