2016-08-31 11 views
1

UIViewControllerが多数あるiOS9 +/Swift 3アプリケーションの場合、同じ背景色やその他の一般的な属性(フォント、スペーシングなど)を継承するベストプラクティス方法は何ですか?共通の基底クラスを持つのが最善でしょうか?あるいは何らかのプロトコルですか?多くのUIViewControllerの背景色と他の属性を継承します

+1

「あなたの質問は、書籍全体で答え、または持っていることができれば**多くの有効な答えが**、それはおそらく私たちのフォーマットの範囲が広すぎるのです」 – ZGski

答えて

3

ほとんどの視覚的属性は特定のUIViewとUIViewサブクラス(UILabel、UIButtonなど)に関連付けられているため、UIViewControllerレベルでこれを処理すると、ビューコントローラが非常に多くの詳細を担当するようになります他のクラスに

UIAppearance APIは、さまざまなビューでグローバルな視覚的属性を設定するためのAppleの組み込みメカニズムです。 good overview of that on NSHipster

UIAppearanceを使用することの欠点は、一部のボタンが赤色で、一部のボタンが青色であるように、スタイリングのバリエーションに容易に対応できないことです。これは基本的に、アプリ全体の特定のビューのすべてのインスタンスの固定デフォルトの外観です。

個人的には、定義済みスタイルの組み合わせをビューに適用できる専用スタイリングフレームワークを使用することをお勧めします。 I have written about thisと、frameworkを作成して、UIKitコンポーネントのスタイルを作成し、ストーリーボード内でそれらを適用してプレビューすることを容易にしました。

+0

構成可能&再利用可能なスタイルを定義する別のアプローチ、あなたの場合興味があります:[StyleSheet](https://github.com/werediver/StyleSheet)。 – werediver

1

UI定数を持つ定数ファイルを使用できます。すべてのビューコントローラでこれらの変数を参照するだけで、変更が必要な場合は他のすべてが変更されます。

特定のものの拡張子を付けることもできます。私は通常、カラーを返すUIColorの拡張を持っています。拡張でそれを変更することができ、それはどこにでも変更されます。

extension UIColor{ 
    class func selectedBlue() -> UIColor { 
     return UIColor(red:0.25, green:0.58, blue:0.97, alpha:1) 
    } 
} 
0

あなたはあなたのビューの背景色を設定するための所望の成分の例えばのための共通の基底クラスを持つことができ、サブクラスはその名前がBackgroundViewも聞かせて作成します。

class UHBView: UIView { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.backgroundColor = UIColor.blueColor(); //Any color you want 
    } 

} 

は今すぐすべてのビューのためにInterface Builderでアイデンティティインスペクタでカスタムクラスとして、このサブクラスを設定します。

enter image description here

+0

これはランタイム属性のようですが、私はプロトコルがSwiftの継承よりも優れているという印象を受けていますが、私は本当に分かりません。 –

関連する問題