2010-09-22 12 views
6

Przeglądałem API do programowania IOS i czytałem o kontrolerach widoku i UIViews. Wygląda na to, że podklasy UIViewController są naprawdę użyteczne w nawigacji Modal i animacji niestandardowej, ale nie widzę żadnych innych zastosowań.Kiedy należy używać kontrolera UIViewController w programie IOS?

Jakie korzyści przynosi zastosowanie podklas UIViewController zamiast zwykłej podklasy NSObject?

Dlaczego

@interface MyViewController : UIViewController { 
} 

-(void)handleEvent; 

@end 

Zamiast

@interface MyViewController : NSObject { 
    UIView* view; 
} 

@property(retain) UIView* view; 
-(void)handleEvent; 

@end 

Nie wystarczy skończyć dodając tylko widok z okna, a nie samą viewController? Dla większości celów, czy nie jest potrzebna cała funkcjonalność zamknięta w obiekcie UIView? po prostu skończyć dodając go tak:

[window addSubview:myViewControllerInstance.view] 

Czy jest wykorzystanie do UIViewController innego niż wbudowany w funkcjonalności jak Modal nawigacja?

Dzięki.

(Przepraszam, jeśli to głupie pytanie, Uczę się to przez 2 dni teraz)

Odpowiedz

2

Kakao w systemach Mac OS i iOS intensywnie korzysta ze wzoru Model-View-Controller (MVC). Po modelu MVC UIViewController jest klasą Controller. Jego zadaniem jest koordynacja interakcji między Twoim interfejsem użytkownika (View objects) a danymi aplikacji (obiektami Model). Zasadniczo kontroler jest przede wszystkim tam, gdzie umieszcza się logikę aplikacji. Obsługuje zdarzenia i wywołuje widok i model odpowiednio.

Zobacz UIViewController reference, który ma ładny przegląd na zajęciach.

Wychodząc z UIViewController, otrzymujesz za darmo kilka funkcji kontrolera, takich jak ładowanie widoków z pliku Nib (initWithNibName: bundle :) i odpowiadanie na zdarzenia związane z widokiem (viewWillAppear :, viewWillDisappear :). Dodatkowo, UIViewController sam jest podklasą UIResponder, która zawiera funkcje do obsługi zdarzeń dotykowych (touchesBegan: withEvent, touchesMoved: withEvent, touchesEnded: withEvent).

Zasadniczo nie ma powodu, aby nie używać kontrolera UIViewController z całą funkcjonalnością, jaką zapewnia. Nawet jeśli uda ci się to zrobić, będzie to znacznie więcej pracy, bez żadnej realnej korzyści.

+1

Chodzi o to, że w większości architektur-widok-kontrolerów, których użyłem lub opracowałem, kontroler jest całkowicie niezależny od widoku. Te "Kontrolery widoku" zachęcają do tak ścisłego łączenia widoku i kontrolera - czy powinienem stworzyć większe klasy kontrolerów do komunikacji między poszczególnymi kontrolerami widoku a modelem? – user434565

+0

Wzór MVC nie oddziela kontrolera od widoku. Jeśli spojrzysz na diagramy MVC, zobaczysz, że część kontrolera obsługuje bezpośrednio zarówno model, jak i widok. 'UIViewController' już dba o Ciebie" kontrolowanie "" widoku ". –

+0

Dlaczego nie ma klasy "Model" do podklasy? –

0

Spójrz na właściwości i metod instancji klasy UIViewController, który nie dostanie za darmo, jeśli właśnie podklasowałeś NSObject. Istnieje wiele rzeczy, które będą używane we wszystkich aplikacjach.

Powiązane problemy