2014-12-01 6 views
6

Sto cercando di rimuovere tutte le sottoview che ho aggiunto alla mia vista, quindi ho implementato un ciclo per scorrere le subviews con il seguente:Come rimuovere solo le visualizzazioni secondarie aggiunte dall'utente dal mio UIView

for subview in view.subviews { 
    println(subview) 
    //subview.removeFromSuperview() 
} 

Ho provato questo aggiungendo un UILabel alla mia vista e quindi ho eseguito questo codice. L'output conteneva la mia UILabel ma anche una _UILayoutGuide. Quindi, la mia domanda è: come posso determinare se una sottoview è una che ho aggiunto o una che il sistema ha aggiunto?

+0

Che cosa succede se si specifica il tipo di visualizzazione secondaria come in questa risposta: http: // stackoverflow.com/a/25067739/2274694? –

+0

@LyndseyScott Non sono sicuro di come mi possa essere d'aiuto – Epsilon

+0

In entrambi i casi, le viste che stai rimuovendo sono tipi specifici, ad esempio UIViews, UILabels e così via? Perché puoi limitare la rimozione della sottoview per classe ... Posso scrivere una risposta per te. –

risposta

13

Se si desidera solo impedire al ciclo di rimuovere il _UILayoutGuide (che è di classe UILayoutSupport), provate questo:

for subview in self.view.subviews { 
    if !(subview is UILayoutSupport) { 
     print(subview) 
     subview.removeFromSuperview() 
    } 
} 

E in generale, se si desidera impedire la rimozione di punti di vista diversi dal _UILayoutGuide e se si conoscono i tipi specifici di subviews faresti per rimuovere dal vostro UIView, è possibile limitare i subviews si rimuove a quei tipi, es:

for subview in view.subviews { 
    if subview is ULabel { 
     println(subview) 
     subview.removeFromSuperview() 
    } 
} 
9

Un'opzione è dare a tutte le viste che aggiungi un tag specifico. Quindi rimuovili solo se hanno quel tag.

userCreatedView.tag = 100; 

...

for subview in view.subviews { 
    if (subview.tag == 100) { 
     subview.removeFromSuperview() 
    } 
} 

Si potrebbe anche mantenere un array di tutti i subviews che l'utente ha aggiunto quindi controllare per vedere se questo è nella vostra visualizzazione secondaria userAddedViewsArray

Oppure si potrebbe creare una sottoclasse di UIView per le viste aggiunte dall'utente e quindi rimuovere solo le sottoview di quella classe

+0

Grazie. Purtroppo, sto già usando la proprietà del tag per qualcos'altro. – Epsilon

+0

Appena aggiunto in un paio di altre opzioni. Ci sono molti modi per farlo, e sono tutti abbastanza facili. –

+0

Speravo di evitare l'aggiunta di codice aggiuntivo ogni volta che aggiungo una nuova sottoview. Grazie per i buoni suggerimenti, però. – Epsilon

1

risolvo problema come questo modo .... prima ho aggiunto sub vista

  • [self.view addSubview: genderPicker];

quindi rimuovere solo visualizzazione secondaria dalla vista

  • [genderPicker removeFromSuperview];
0

indicatore fuori dal divertente ingresso stringa rapida 2.2 e superiori

func activityonoff(viewcontroler:UIViewController,string:String){ 
let container: UIView = UIView() 
let loadingView: UIView = UIView() 
if string == "on"{ 
container.frame = viewcontroler.view.frame 
container.center = viewcontroler.view.center 
container.backgroundColor = UIColor.whiteColor() 
container.alpha = 1 
container.tag = 1 

loadingView.frame = CGRectMake(0, 0, 80, 80) 
loadingView.center = container.center 
loadingView.backgroundColor = UIColor(red: 4/255, green: 68/255, blue: 68/255, alpha: 0.7) 
loadingView.clipsToBounds = true 
loadingView.layer.cornerRadius = 10 

let actInd: UIActivityIndicatorView = UIActivityIndicatorView() 
actInd.frame = CGRectMake(0.0, 0.0, 40.0, 40.0); 
actInd.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge 
actInd.center = CGPointMake(loadingView.frame.size.width/2,loadingView.frame.size.height/2); 
loadingView.addSubview(actInd) 
container.addSubview(loadingView) 
viewcontroler.view.addSubview(container) 
actInd.startAnimating() 
} 
else{ 
    for v in viewcontroler.view.subviews{ 
     if v.tag == 1{ 
      v.removeFromSuperview() 
     } 
    } 

} 

}

Problemi correlati