2013-07-10 12 views
5

Jestem trochę nowy w rozwoju MVC i iOS i nie mogę się zgodzić, jak styl UI pasuje do tego paradygmatu.Czy stylizacja obiektów interfejsu użytkownika w iOS narusza MVC?

Mój widok MVC jest zbudowany za pomocą storyboardów i mogę zastosować prymitywny styl za pomocą inspektora atrybutów Xcode, ale cokolwiek bardziej skomplikowanego muszę użyć kontrolera do stylu. Na przykład:

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // required 

    // set background color of view 
    [[self view] setBackgroundColor:[UIColor darkGrayColor]]; 
} 

To wydaje się być oczywiste naruszenie MVC, jak ja stosując logikę styl wewnątrz kodu sterownika. Uważam, że jest to analogiczne do pisania aplikacji HTML i zamiast używania arkuszy stylów, piszę kod, aby zastosować style lokalnie w JavaScript. Czy to jest słabość systemu iOS, czy też robię to źle?

+0

Można łączyć ze sobą oba elementy w kodzie. Jeśli chcesz, możesz nawet manipulować szczegółami modelu w sterowniku. MVC nie jest ściśle przestrzegane w ogólnych wytycznych wzorca, ale jeśli chcesz pozostać wiernym paradygmatu, musisz powstrzymać się od używania M lub V w C. – ApolloSoftware

+1

Można argumentować, że styl jest formą danych. Ponieważ kontroler zwykle dostarcza widok danych, posiadanie sterownika zapewnia podobny styl widoku. – rmaddy

Odpowiedz

2

Zrobione z Apple's docs:

niektóre obiekty kontroler może również powiedzieć obiektu widoku, aby zmienić aspekt jego wygląd lub zachowanie

I to ma sens, jako że widok ma być pasywnym i odzwierciedlać tylko stan aplikacji jako interfejs użytkownika, a kontroler "powie" widokowi, czy część jego treści musi zostać zmieniona zgodnie z działaniami użytkownika. (np. zmiana tła, widoczność kontrolek itp.)

+0

Ale w tym przypadku po prostu stylizuję wygląd statycznych przycisków, etykiet itp. Nie ma połączenia z reagowaniem na akcje użytkownika lub zmianą modelu. Myślę, że w systemie iOS może brakować odpowiednika CSS. – Erich

+1

Widok musi zostać utworzony gdzieś, ponieważ widok nie wywołuje własnego stworzenia.Chociaż Konstruktor interfejsów ukrywa większość tego, nie oznacza to, że nie tworzy widoków w ten sam sposób – giorashc

0

Można łączyć ze sobą oba elementy w kodzie. Jeśli chcesz, możesz nawet manipulować szczegółami modelu w sterowniku. MVC nie jest ściśle przestrzegane w ogólnych wytycznych tego schematu, ale jeśli chcesz pozostać wiernym paradygmatu, musisz powstrzymać się od używania M lub V w C.

Widok zawiera kosmetyki i estetykę formularzy jak również styl, ale z dołu, możesz manipulować tymi aspektami ze sterownika ...

1

W rzeczywistości ekran jest twoim "widokiem", a twój "kontroler" wysyła wiadomość do widoku, aby użyć innego koloru dla tło.

Jeśli miałeś obiekt danych utrzymujący kolor ekranu, mógł to być twój "model". W takim przypadku użytkownik przekazywałby dane z modelu do widoku za pośrednictwem kontrolera.

0

Jak powiedzieli inni, jeśli rozumiesz kolory i style jako dane, to dobrze jest pozwolić kontrolerowi zająć się tym.

Ale można również podklas UIviews i wewnętrznie ustawić styl.

Załóżmy, że masz TrafficLightView : UIView z właściwością id trafficLight. można zastąpić ustawiającego i ustawić kolor tła widoku odpowiednio do stanu obiektu. trafficLight.

Powiązane problemy