많은 UIViewController가있는 iOS9 +/Swift 3 앱의 경우 동일한 배경색과 기타 일반적인 특성 (글꼴, 간격 등)을 상속하는 가장 좋은 방법은 무엇입니까? 공통 기본 클래스를 갖는 것이 가장 좋습니다. 아니면 프로토콜의 일종?많은 UIViewController에 대한 배경색 및 기타 특성 상속
답변
대부분의 시각적 특성은 특정 UIViews 및 UIView 하위 클래스 (예 : UILabel, UIButton 등)와 연결되어 있으므로이 UIViewController 수준에서 처리하면 뷰 컨트롤러가 너무 많은 세부 정보를 처리해야합니다. 다른 클래스들에게.
다양한보기에서 글로벌 시각적 속성을 설정하는 Apple의 기본 제공 메커니즘은 UIAppearance API입니다. good overview of that on NSHipster
UIAppearance를 사용하는 단점은 일부 버튼이 빨간색이고 일부 버튼이 파란색 인 것처럼 스타일링의 변형을 쉽게 수용 할 수 없다는 것입니다. 기본적으로 앱 전체의 특정보기에 대한 모든 인스턴스의 고정 기본 모양입니다.
개인적으로 미리 정의 된 스타일 조합을보기에 적용 할 수있는 전용 스타일링 프레임 워크를 선호합니다. I have written about this 및 framework을 작성하여 UIKit 구성 요소의 스타일을 쉽게 작성하고 스토리 보드 내에서 적용 및 미리보기 할 수 있습니다.
또 다른 방법은, 합성 가능한 및 재사용 스타일을 정의하는 관심 있으신 분 [StyleSheet] (https://github.com/werediver/StyleSheet). – werediver
UI 상수가있는 상수 파일을 가질 수 있습니다. 모든 뷰 컨트롤러에서 이러한 변수를 참조하면 변경이 필요한 경우 다른 모든 것이 변경됩니다.
특정 항목을 확장 할 수도 있습니다. 일반적으로 색상을 반환하는 UIColor의 확장이 있으며 확장에서 변경할 수 있으며 다른 곳에서는 변경됩니다.
extension UIColor{
class func selectedBlue() -> UIColor {
return UIColor(red:0.25, green:0.58, blue:0.97, alpha:1)
}
}
당신은 당신의 전망의 배경 색상을 설정 원하는 구성 요소 예컨대위한 공통 기본 클래스를 가질 수 있습니다, 서브 클래스가 그 이름 BackgroundView 수 있도록 만듭니다.
class UHBView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.blueColor(); //Any color you want
}
}
이제 인터페이스 빌더의 모든보기에 대한 ID 관리자에서이 하위 클래스를 사용자 정의 클래스로 설정하십시오.
런타임 속성처럼 보이고 프로토콜이 Swift에서 상속보다 낫다는 인상을 받고 있습니다 ... 그러나 나는 정말로 모른다. –
"귀하의 질문에이 책 전체 응답, 또는이 될 수 있다면 ** 많은 유효한 답 **, 그것은 아마도 우리의 형식에 너무 광범위의"당신이 경우 – ZGski