2017-09-16 3 views
0

여러 스토리 보드의 모든 내 ViewController에 일부 스타일을 적용하고 싶습니다. 나는 많은 viewcontroller를 가지고 있으므로 모든 viewcontroller에 스타일링을 적용하는 것은 다소 어리 석다. 나는 가능한 한 대부분의 코드가 희박한 방법으로 그것을하고 싶다. AppDelegate 파일에서이 작업을 수행 할 생각이었습니다. 네비게이션 컨트롤러의 스타일을 변경할 수도 있기 때문입니다.하지만 지금까지는 성공하지 못했습니다. 심지어 사소한 방법조차도.모든 단추에 사용자 지정 UIButton 스타일 적용

아무도 내가 이것을 할 수있는 방법을 알고 있습니까?

나는 앱을 위해 스위프트를 사용하고 있습니다.

다음 스타일링의 원칙이 적용되어야한다 : cornerRadius, shadowColor, shadowOffset, shadowRadius, shadowOpacity, maskToBounds을.

+0

체크'UIAppearance' – JuicyFruit

+1

을 변경하고 모든 버튼 대신 하위 것을 사용 할 수 있습니다 'UIButton' – Lamar

+0

@ 라마르 고맙습니다, 그게 최선의 해결책이 될 것입니다. –

답변

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에서이 모든 스타일링 속성을 포함 UIButton``의 서브 클래스를 생성하지 않는 이유는

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() 
    } 

} 
관련 문제