Swift addubview i usuń go

82

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!

Dasoga
źródło
Co oznacza „nie działa”? Dodanie? Usunięcie? Błędy? Zmień swoje pytanie, aby zawrzeć więcej informacji.
ABMagil
1
testView to widok z tagiem 100, a nie self.view, więc Twoja instrukcja if nigdy nie jest wykonywana.
rdelmar
Dziękuję za odpowiedź. Jest edytowany teraz
Dasoga

Odpowiedzi:

99

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!")
    }
}
Dasoga
źródło
75

Musisz użyć viewWithTagfunkcji, aby znaleźć widok z podanym 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
źródło
Dzięki! faktycznie to rozwiązało mój problem. Ale interakcja z de super view nie wyłącza. Jak mogę wyłączyć interakcję z super widokiem?
Dasoga
Nie rozumiem. Jaka interakcja z superwiewem?
rakeshbs
Mam gest stuknięcia w pierwszym widoku, po czym za pomocą przycisku dodaję widok podrzędny, ale jest to tylko widok informacji, więc jednym dotknięciem chcę go usunąć. Teraz działa usuwanie kranu. Ale w pierwszym widoku otrzymuję ten sam kran, muszę go wyłączyć ... dzięki!
Dasoga
Gdzie chcesz stuknąć, aby usunąć widok informacji? Czy chcesz usunąć widok po dotknięciu widoku informacji od wewnątrz, a nie od zewnątrz?
rakeshbs
Tak, kiedy użytkownik dotknie widoku informacji (drugi widok), chcę usunąć ten widok (drugi widok) i ponownie pokazać pierwszy widok.
Dasoga
2

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 fooi removeFromSuperviewmetody

foo.removeFromSuperview()
rzemiosło
źródło
0

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
Muhammad Hamza Munir
źródło
-9

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)

Pravin Kamble
źródło
8
willRemoveSubview nie usuwa widoku podrzędnego z superviewu. Informuje tylko, kiedy podwidok ma zostać usunięty.
Murat Yasar,
3
Aby usunąć niestandardowy widok z superviewu, należy użyć myView.removeFromSuperview ()
Yaroslav Bai
1
willRemoveSubview nie usuwa widoku podrzędnego z superviewu.
Imtee