2017-09-16 6 views
0

複数のストーリーボードからすべてのビューコントローラにスタイリングを適用したいと思います。私は多くのviewcontrollerを持っているので、すべてのviewcontrollerにスタイリングを適用するのはむしろ馬鹿です。私はできるだけコードを細かくしたいと思っています。私はAppDelegateファイルでそれをやろうと思っていました。あなたのナビゲーションコントローラのスタイリングを変更することもできますが、これまでのところ成功していないからです。ちょっとでも。すべてのボタンにカスタムUIButtonスタイリングを適用する

私はこれをどのように行うことができるのか誰にも分かりますか?

私はアプリのためにスイフトを使用しています。

次スタイリング原則が適用されなければならない: cornerRadiusshadowColorshadowOffsetshadowRadiusshadowOpacitymaskToBounds

+0

チェック 'UIAppearance' – JuicyFruit

+1

は、なぜあなたは、これらすべてのスタイリング属性が含まれている' UIButton'のサブクラスを作成し、すべてのボタンが代わりにそのサブクラスを使用しないでください'UIButton' – Lamar

+0

@Lamarありがとう、それは最高の解決策になります。 –

答えて

2

UIComponentsの拡張機能を作成して、共通のスタイルを追加します。 UIButton

extension UIButton { 
    open override func draw(_ rect: CGRect) { 
     //provide custom style 
     self.layer.cornerRadius = 10 
     self.layer.masksToBounds = true 
    } 
} 

のケースやUIButtonのサブクラスを作成し、uは適用したいすべてのスタイルを提供し、あなたのボタンは、カスタムクラスから延びていることを確認してくださいと同じように

class MyButton : UIButton { 
     override init(frame: CGRect) { 
      super.init(frame: frame) 
      setup() 
     } 

     required init?(coder aDecoder: NSCoder) { 
      super.init(coder: aDecoder) 
      setup() 
     } 
    } 

    private func setup() { 
     self.layer.cornerRadius = 10 
     self.layer.masksToBounds = true 
    } 
+0

@lamar:リファクタリングコードのためにありがとう:)多くのことを歓迎 –

+1

あなたはそれがチームの努力です:) – Lamar

0
あなたが使用することができます

UIAppearance api:このように:

UIButton.appearance().layer.cornerRadius = 4 
UIButton.appearance().layer.shadowColor = UIColor.white.cgColor 
UIButton.appearance().layer.shadowOffset = CGSize(width: 2, height: 2) 
UIButton.appearance().layer.shadowRadius = 5 
UIButton.appearance().layer.shadowOpacity = 0.5 
UIButton.appearance().layer.masksToBounds = true 

これを使用すると、アプリケーションのすべてのUIButtonは、定義した視覚プロパティを持つようになります。

あなたはUIButtonは、ボタンのスタイルを保持するそのAPIと、それにすべてのボタンを準拠して使用https://developer.apple.com/documentation/uikit/uiappearance

0

でこのAPIに関する詳細な情報を見つけることができます。

1

IBInspectableを使用してカスタムクラスを作成できます。あなたはUIから変更することができます。====>

class NSCustomButton: UIButton { 

    @IBInspectable var borderColor: UIColor = UIColor.clear { 
     didSet { 
      layer.borderColor = borderColor.cgColor 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat = 0 { 
     didSet { 
      layer.borderWidth = borderWidth 
     } 
    } 

    @IBInspectable var cornerRadius: CGFloat = 0 { 
     didSet { 
      layer.cornerRadius = cornerRadius 
      self.clipsToBounds = true 
      self.layer.masksToBounds = true 
     } 
    } 

    @IBInspectable var cornerRadiusByHeight: Bool = false { 
     didSet { 
      layer.cornerRadius = self.frame.size.height/2 
     } 
    } 

    @IBInspectable var roundButton: Bool = false { 
     didSet { 
      layer.cornerRadius = self.frame.size.width/2 
      self.clipsToBounds = true 
      self.layer.masksToBounds = true 
     } 
    } 


    @IBInspectable var shadowColor: UIColor = UIColor.clear { 

     didSet { 

      layer.shadowColor = shadowColor.cgColor 
      layer.masksToBounds = false 
     } 
    } 


    @IBInspectable var shadowOpacity: CGFloat = 0.0 { 

     didSet { 

      layer.shadowOpacity = Float(shadowOpacity.hashValue) 
      layer.masksToBounds = false 
     } 
    } 

    @IBInspectable var shadowRadius: CGFloat = 0.0 { 

     didSet { 

      layer.shadowOpacity = Float(shadowRadius.hashValue) 
      layer.masksToBounds = false 
     } 
    } 

    override internal func awakeFromNib() { 
     super.awakeFromNib() 
    } 

} 
関連する問題