2009-09-19 9 views
11

Mam aplikację z 2 ekranami (MainViewController i AboutViewController). Gdy użytkownik kliknie przycisk, chciałbym załadować ekran AboutViewController, który jest zdefiniowany w innym XIB.Jak załadować XIB?

Wydaje się proste, ale dzisiaj nie mogę znaleźć mojego google-fu. Jak mogę to zrobić?

Odpowiedz

30

Po wywołaniu [AboutViewController init], to oczekuje się wywołać jakąś formę [super init], która jest synonimem [UIViewController init]. Gdy tak się stanie, kontroler widoku automatycznie wyszuka plik stalówki nazwany (w twoim przypadku) AboutViewController.xib. Jeśli znajdzie ten plik, załaduje jego zawartość do kontrolera widoku.

Zasadniczo wszystko, co musisz zrobić, to zainicjować kontroler widoku i upewnić się, że ma taką samą nazwę jak powiązany plik nib.

Jeśli chcesz załadować plik nib z inną nazwą do kontrolera widoku, możesz jawnie wywołać initWithNibName:bundle: z nazwą dowolnego pliku końcówki, który ci się podoba.

Jeśli standardowy plik init (z plikiem tej samej nazwy) nie działa, istnieje kilka rzeczy, które można sprawdzić.

  • pisownia nazwy klasy jest taka sama jak w pisowni (a obudową) pliku nib
  • plik stalówka jest zawarty w projekcie, a nie tylko siedzi w tym samym katalogu
  • swoje metoda startowych UIViewController podklasy za nie również zadzwonić [super init]
  • dzwonisz metodę startowy Twojego UIViewController podklasy za
  • jesteś rzeczywiście czyni widok widoczny Państwa zdanie kontrolera
+4

miałem żadnych XIBs idea były automatycznie ładowane lubię to. Dzięki! – DOOManiac

11

Na ekranie Informacje możesz po prostu wyświetlić widok, a następnie go odrzucić. Zamiast więc używać zupełnie nowego kontrolera widoku, wystarczy objąć bieżący widok.

Zakładając masz ivar

UIView *aboutUsView; 

z odpowiednim obiektem.

W kontrolerze widoku zrobić:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items 
[self.view addSubview:aboutUsView]; // Retains the view 
[aboutUsView release]; 

Aby usunąć widok, powiedzmy w działaniu połączonym z przyciskiem na widoku, należy:

[aboutUsView removeFromSuperview], aboutUsView = nil; // Releases the view 
+0

Powiedział, że miał dwa kontrolery widoku "MainViewController i AboutViewController", a nie kontroler widoku i widok. – mahboudz

+5

Prawidłowo. Powiedziałem specjalnie, że może nie potrzebować obojga, aby osiągnąć zamierzony cel. –

+0

To wydaje się być oczywistą metodą. – user1432813