2014-09-28 11 views
6

Nella mia applicazione sto aggiungendo le etichette per la vista e poi sto cercando di eliminare etichette particolari dal punto di vista quando un pulsante viene premuto e sono in esecuzione in un errore quando si cerca di recuperare i subviews:Swift - Recupero subviews

class FirstViewController: UIViewController { 

    @IBAction func btnAddTask_Click(sender: UIButton){ 

      var subViews = self.subviews.copy() 

    } 
} 

ottengo l'errore:

'FirstViewController' non ha un membro denominato '' subviews

Come posso ottenere le subviews della vista corrente?

+1

'auto. view.subviews'? –

+0

Ho provato questo e ottenere questo errore: '[AnyObject]' non ha un membro chiamato 'copia' – user2961953

+0

Le matrici vengono sempre copiate in Swift. –

risposta

11

UIViewController non ha una proprietà subviews. Ha una proprietà view, che ha una proprietà subviews:

for subview in self.view.subviews { 
    // Manipulate the view 
} 

ma in genere questo non è una buona idea. Dovresti invece inserire le etichette che vuoi in un IBOutletCollection e iterare su quello. Altrimenti sei molto legato all'esatta serie di sottoview (che potrebbero cambiare).

Per creare lo IBOutletCollection, selezionare tutte le etichette desiderate in IB e trascinarle al controllo del codice sorgente. Dovrebbe chiedere se si desidera creare un array di raccolta. (Si noti che non v'è alcuna promessa dell'ordine di questo array.)

+0

grazie. Questo funziona. Vedrò il tuo suggerimento per l'utilizzo di IBOutletCollection – user2961953

+0

Sto creando dinamicamente le etichette, quindi dovrò capire come aggiungere le etichette alla raccolta dal codice sorgente. Grazie ancora – user2961953

+0

Inseriscili in una proprietà di array appena li crei. –

4

Per trovare tutti subviews dalla vostra vista è possibile utilizzare questo codice:

for subview in self.view.subviews { 
    // Use your subview as you want 
} 

Ma per usarlo, è necessario identificare vista ciò che si bisogno. È possibile contrassegnare ogni elemento, ciò che si crea, con Identifier speciale come questo:

myButton.restorationIdentifier = "mySpecialButton"; 

E dopo che si può trovare il vostro elemento di utilizzare questa struttura:

for view in view.subviews { 
       if (view.restorationIdentifier == "mySpecialButton") { 
        print("I FIND IT"); 
        view.removeFromSuperview(); 
       } 
      } 

:)