2010-06-09 23 views
17

Dodałem UIButton, UITextView jako subview do mojego widoku, programowo.Jak usunąć widoki podrzędne

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]; 

tutaj, jeśli klikniemy przycisk, muszę usunąć wszystkie sub widoki,

staram

[self.view removeFromSuperView] 

ale jej nie działa

pomocy.

Odpowiedz

16

Zakładam, że dzwonisz pod numer [self.view removeFromSuperView] z metody w tej samej klasie, co powyższy fragment.

W takim przypadku [self.view removeFromSuperView] usuwa self.view z własnego podglądu, ale self jest obiektem, z którego widoku chcesz usunąć subviews. Jeśli chcesz usunąć wszystkie subviews obiektu, trzeba to zrobić w zamian:

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

Być może, że chcesz przechowywać te subviews w NSArray i pętli na tej tablicy powołuje removeFromSuperview na każdego elementu, który szyk.

+0

co z przyciskiem, stworzyłem, dodając jako widok podrzędny. aktualnie próbuję wyświetlić widok z widokiem tekstowym, gdy przycisk jest naciśnięty, a po kliknięciu innego przycisku znajdującego się w widoku bieżącym, musi on wrócić do poprzedniego widoku. – mac

+0

próbowałem [notesDescriptionView removeFromSuperview]; [textView removeFromSuperview]; , ale nie działa. – mac

+0

Jaki jest właściwy sposób wywoływania takiej metody, która usuwa podglądy z widoku z innych klas? Próbuję metody delegatów, ale to nie działa. – SanitLee

56

usunąć wszystkie subviews zostały dodane do widoku

użyć następującego kodu

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

to powinna być zaakceptowana odpowiedź! – Umitk

7

Zawsze byłem zaskoczony, że Objective C API nie ma prostego sposobu na usunięcie wszystkich widoki podrzędne z UIView. (Flash API robi, a skończyć się konieczności jej całkiem sporo.)

Anwyay, to jest trochę metoda pomocnika, który używam do tego:

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

EDIT: po prostu znalazłem bardziej eleganckie rozwiązanie tutaj: What is the best way to remove all subviews from you self.view?

używam który przedstawia się następująco:

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

Lubię t kapelusz lepiej ...

Erik