2017-09-16 89 views
0

我想將一些樣式應用於來自多個故事板的所有視圖控制器。我有很多視圖控制器,所以將樣式應用於每個視圖控制器聽起來都很愚蠢。我希望儘可能以最精簡的代碼方式來完成。我正在考慮在AppDelegate文件中這樣做,因爲您也可以在那裏更改導航控制器樣式,但目前爲止沒有成功。甚至絲毫沒有。將自定義UIButton樣式應用於所有按鈕

那麼有誰知道我該怎麼做?

我正在使用Swift的應用程序。

以下造型原則必須應用: 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

您可以使用UIA外觀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都會將這些可視屬性設置爲你定義的內容。

您可以在https://developer.apple.com/documentation/uikit/uiappearance

0

找到有關此API的更多信息,可使用的UIButton一個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() 
    } 

} 
相關問題