2013-07-10 16 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

あなたはあなたのコード内の2つをミックスして一致させることができます。必要に応じて、コントローラーでモデルの詳細を操作することもできます。 MVCはパターンの一般的なガイドラインでは厳密には強制されませんが、パラダイムに忠実になりたい場合は、CでMまたはVを使用しないでください。 – ApolloSoftware

+1

スタイルはデータの形式であると主張できます。コントローラは通常、ビューにデータを提供するため、コントローラがスタイルをビューに提供することは似ています。 – rmaddy

答えて

2

受動的であり、アプリケーション状態をUIとして反映するだけであり、コントローラは、コンテンツの一部がユーザの操作に応じて変更される必要がある場合、ビューに「通知」する。 (背景の変更、コントロールの可視性など)

+0

しかし、この場合は、静的なボタン、ラベルなどの外観をスタイリングしているだけです。ユーザーの操作やモデルの変更に応答することはできません。私は、iOSがCSSに相当するものを失っているかもしれないと思う。 – Erich

+1

ビューは、ビューが独自の作成を呼び出さないため、どこかに作成する必要があります。Interface Builderはこれのほとんどをあなたから隠していますが、同じ方法でビューを作成していないわけではありません – giorashc

0

あなたはあなたのコード内の2つをミックスして一致させることができます。必要に応じて、コントローラーでモデルの詳細を操作することもできます。 MVCはパターンの一般的なガイドラインに厳密には施行されていませんが、パラダイムに忠実になりたい場合は、CでMまたはVを使用することを控えてください。

ビューは、化粧品とスタイリングだけでなく、最終行には、コントローラからこれらのファセットを操作することができます...

1

実際には、画面は "ビュー"であり、 "コントローラ"は異なる色を使用するためにビューにメッセージを送ります背景。

あなたは、画面の色を保持しているデータオブジェクトを持っていた場合、それはあなたの「モデル」である可能性があります。その場合は、モデルからコントローラを介してビューにデータを渡します。一部のコントローラオブジェクトはまた、その外観や動作

の 側面を変更するためにビューオブジェクトを伝える可能性があり、ビューがすることになっているとして、それは意味を成しません

Apple's docsから撮影

0

色とスタイルをデータとして理解していれば、コントローラがそれを気にするようにしても問題ありません。

しかし、あなたはまた、UIviewsをサブクラス化し、内部のスタイルを設定することができます。

は、プロパティid trafficLightTrafficLightView : UIViewを持っている、のは、言ってみましょう。セッターを上書きして、オブジェクトの状態に応じてビューの背景色を設定することができます。 trafficLight.