2013-07-10 19 views
5

我對MVC和iOS開發有點新,我似乎無法理解UI風格如何適應這種範式。在iOS中造型UI對象是否違反MVC?

我的MVC的觀點是用故事板建成,我可以通過Xcode的屬性檢查器中應用的原始造型,但任何事情更復雜我必須使用該控制器的風格。例如:

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

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

這似乎是明顯違反了MVC,因爲我在控制器代碼中應用了樣式邏輯。我發現這類似於編寫一個HTML應用程序,而不是使用樣式表,我編寫代碼在JavaScript中本地應用樣式。這是iOS的弱點還是我做錯了?

+0

你可以混合和匹配兩個你的代碼中。如果你想要,你甚至可以在Controller中操作Model的細節。該MVC沒有嚴格執行該模式的一般準則,但如果你想留真實的,你只需要使用M或V在C – ApolloSoftware

+1

有人可能會說風格不要範式是數據的形式。由於控制器通常爲數據提供視圖,因此控制器以風格提供視圖的過程與此類似。 – rmaddy

回答

2

Apple's docs摘自:

一些控制器對象也可能會告訴視圖對象改變其外觀或行爲

的 方面它有一定道理的觀點應該是是被動的,只能將應用程序狀態反映爲UI,並且控制器將根據用戶操作「告訴」視圖是否需要更改其某些內容。 (例如背景變化,控件等知名度...)

+0

但在這種情況下,我只是靜態按鈕,標籤等外觀樣式。與響應用戶操作或模型更改沒有關係。我認爲iOS可能缺少CSS的等價物。 – Erich

+1

該視圖必須在某處創建,因爲該視圖不會調用其自己的創建。雖然Interface Builder的確隱藏了大部分內容,但並不意味着它不會以相同的方式創建視圖 – giorashc

0

你可以混合和匹配兩個你的代碼中。如果你想要,你甚至可以在Controller中操作Model的細節。 MVC沒有嚴格執行該模式的一般準則,但如果你想保持對模式的忠實,你只需要避免使用C中的M或V.

視圖需要化妝品和美學的形式以及樣式,但底線,你可以從控制器操縱這些方面...

1

其實屏幕是你的「視圖」,你的「控制器」發送消息到你的視圖使用不同的顏色的背景。

如果你有這樣舉行的屏幕顏色的數據對象,這可能是你的「模式」。在這種情況下,您將通過控制器將數據從模型傳遞到視圖。

0

正如其他人說,如果你瞭解的顏色和樣式的數據,它是確定,讓控制器照顧它。

但你也可以繼承UIviews並在內部設置樣式。

比方說,你有一個屬性id trafficLight一個TrafficLightView : UIView。您可以覆蓋setter並根據對象的狀態設置視圖的背景顏色。 trafficLight.

相關問題