2012-03-22 11 views
30

Mam UINavigationController. Po prawej stronie mam przycisk, którego kliknięcie muszę wyświetlić w widoku rozwijanym. Stworzyłem kolejną klasę UIViewController, z Xib i dodałem ją jako subView do bieżącego widoku. Powinien pojawić się przy pierwszym kliknięciu i zniknąć po drugim kliknięciu. Tak powinno się stać w przypadku wszystkich kliknięć (widok otwarty i widok zamknięty). Napisałem ten kod, ale nie wiem, gdzie idę źle. ktoś proszę pomócIphone usunąć sub widok

-(void)modalTableView 
{ 
tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 

for (UIView *subView in self.view.subviews) 
{ 

    if ([subView isKindOfClass:[TableViewController class]]) 
    { 

     [subView removeFromSuperview]; 
    } 

    else 
    { 
     [self.view addSubview:tableView1.view]; 

    } 
    } 

} 

Czego tu mi brakuje?

EDIT: TableViewController to nazwa mój UIViewController klasy

Odpowiedz

62

Kluczem jest tutaj

for (UIView *subView in self.view.subviews) 

każdy podrzędny jest klasy UIView a testy

isKindOfClass:[TableViewController class] 

jest testowanie klasa TableViewController

Sugerowałbym sposób na zrobienie tego poprzez oznaczenie widoków, które dodajesz dynamicznie, powiedzmy 99 - a następnie w swojej pętli możesz zidentyfikować te widoki według ich znaczników.

np.

for (UIView *subView in self.view.subviews) 
{ 
    if (subView.tag == 99) 
    { 
     [subView removeFromSuperview]; 
    } 
} 
4

Spróbuj tego,

if ([subView isKindOfClass:[UITableView class]]) 
{ 

    [subView removeFromSuperview]; 
} 
+0

Mam widok tabeli moim zdaniem również. Więc to, co to robi, to usuwanie widoku tableview w moim widoku, a nie kontrolera widoku, który dodałem jako asubview. –

+0

Czy twój warunek if działa poprawnie. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/isKindOfClass: – chinthakad

3

Oto coś, co powinno w pewnym stopniu działa - przy założeniu, że tableView1 jest zachowana @property (Jeśli nie to może this SO odpowiedzieć na leniwe technik załadunku jest dla ty).

-(void)modalTableView 
{ 
    if (tableView1 != nil) 
    { 
     tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 
    } 

    if (tableView1.view.superview == nil) 
    { 
     [self.view addSubview:tableView1.view]; 
    } else 
    { 
     [tableView1.view removeFormSuperview]; 
    } 
} 
+0

druga pętla if, w której dodaje się wydział. n tak tableview1 jest zachowany we właściwościach. –

+0

Tak więc, jeśli ma już superview, musisz dodać go do czegoś wcześniej .... sprawdzaj, czy musisz być blisko. Czy chcesz teraz opublikować poprawiony kod? – Damo

Powiązane problemy