2010-06-09 16 views
17

Ho aggiunto UIButton, UITextView come sottoview alla mia vista, programmaticamente.come rimuovere le viste secondarie

notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)]; 
notesDescriptionView.backgroundColor=[UIColor redColor]; 
[self.view addSubview:notesDescriptionView]; 

textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)]; 
[self.view addSubview:textView]; 
printf("\n description button \n"); 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button 
    addTarget:self action:@selector(cancel:) 
    forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"OK" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0); 
[self.view addSubview:button]; 

qui se si clicca sul pulsante, ho bisogno di rimuovere i tutti i punti di vista sub,

sto provando

[self.view removeFromSuperView] 

, ma la sua non funziona

alcun aiuto.

risposta

16

Suppongo che chiami [self.view removeFromSuperView] da un metodo della stessa classe del frammento di cui sopra.

In tal caso, [self.view removeFromSuperView] rimuove il self.view dalla propria superview, ma self è l'oggetto dal cui punto di vista si desidera rimuovere le subview. Se si desidera rimuovere tutte le subviews dell'oggetto, è necessario fare questo, invece:

[notesDescriptionView removeFromSuperview]; 
[button.view removeFromSuperview]; 
[textView removeFromSuperview]; 

Forse che ci si vuole memorizzare quei subviews in un NSArray e un ciclo su tale matrice invocando removeFromSuperview su ogni elemento in quel array.

+0

E il pulsante, che ho creato, aggiungendo come vista secondaria. in realtà sto cercando di mostrare una vista con textview, quando il pulsante è premuto, dopo aver fatto clic sull'altro pulsante presente nella vista attuale, si deve tornare indietro alla mia vista precedente. – mac

+0

ho provato [notesDescriptionView removeFromSuperview]; [textView removeFromSuperview]; ma non funziona. – mac

+0

Qual è il modo giusto per chiamare un tale metodo che rimuove la sottoview dalla superview da un'altra classe? Sto provando il metodo delegato ma non funziona. – SanitLee

56

per rimuovere tutti i subviews aggiunti alla vista

utilizzare il seguente codice

for (UIView *view in [self.view subviews]) 
    { 
    [view removeFromSuperview]; 
    } 
+1

questa dovrebbe essere accettata risposta! – Umitk

7

Sono sempre stato sorpreso che il C API Objective non ha un metodo semplice per la rimozione di tutti i viste secondarie da un UIView. (L'API Flash fa, e si finisce per averne bisogno un po '.)

Anwyay, questo è il metodo di supporto poco che uso per questo:

- (void)removeAllSubviewsFromUIView:(UIView *)parentView 
{ 
    for (id child in [parentView subviews]) 
    { 
    if ([child isMemberOfClass:[UIView class]]) 
    { 
     [child removeFromSuperview]; 
    } 
    } 
} 

EDIT: appena trovato un soluzione più elegante qui: What is the best way to remove all subviews from you self.view?

sto usando che ora come segue:

// Make sure the background and foreground views are empty: 
    [self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

mi piace t cappello migliore ...

Erik

Problemi correlati