2017-01-07 9 views
0

나는이 기사 에서처럼 IBInspectable/IBDesignable을 가지고 놀았습니다 : http://nshipster.com/ibinspectable-ibdesignable/.IBInspectable/IBDesignable에 대한 다중 상속 솔루션을 신속하게?

스토리 보드에서 추가 수정 옵션을 추가하는 방법을 보여줍니다. 그러나 문제는 미리보기에 반영된 이러한 변경 사항을 볼 수 없다는 것입니다. 이를 위해서는 하위 클래스 인 IBDesignable을 사용하고 didset{}을 사용해야합니다.

이 문제는 모든 주식 UIView 하위 클래스의 하위 클래스를 만들어야한다는 점에서 문제가 있습니다. 따라서 UILabel, UITextField 등의 하위 클래스가 있습니다. 테두리와 모서리 반경과 같은 일반 문자 UIView을 복사하여 붙여 넣을 때마다

스위프트가 다중 상속을 지원한다고 생각하지 않습니다. 이렇게하면 훨씬 쉽게 만들 수 있습니다.

IBDesignable 서브 클래스 UIViewIBView이라고 가정 해 봅시다. 예를 들어. UILabelUIView 대신 IBView의 서브 클래스 일 수 있습니까?

을 지루하게 만드는 방법이 있는지 궁금합니다.

+0

내가 아는 한 IBView와 같은 것이 없습니다. 거의 모든 UIKit보기와 같은 소리에 어떤 속성을 추가하려고합니까? 대부분의 애플 리케이션을 위해 당신은 오직 재고 UIKit 충분만큼 UIView 하위 클래스의 매우 작은 소수를 확장/확장해야합니다. 수행하려는 작업이 여러 프로젝트에 대한 IBDesigner/IBInspectable보기를 재사용 할 수있는 경우 해당 항목을 프레임 워크 대상으로 던져 ** 공개 **로 선언하십시오. IB가 그렇게 잘 처리합니다. – dfd

+0

아니요, 불가능합니다. 상속 대신 컴포지션을 사용하십시오. 예를 들어 모서리가 둥근 UIView의 하위 뷰를 만들 수 있습니다. 다른 모서리에 둥근 모서리가 필요한 경우 둥근 뷰로 둘러싸면됩니다. – Sulthan

+0

IBView는 IBViewer의 서브 클래스 이름에 IBDesignable을 추가로 포함하고 있습니다. 예. 재사용 할 수있는 단일 파일을 만들고 있습니다. 더 쉬운 방법이 없다면 그렇게 큰 거래가 아니지 만 나는 궁금하다. – Janneman

답변

2

여러분처럼 IBDesignable에서 더 나은 솔루션을 찾으려고합니다.

  1. 는 내가 원하는 모든 @IBInspectables을 (레코더와 반경, 테두리 너비 ... 등)을 삽입하여 UIView의 확장을했다 : 나는 동일한 코드를 반복하지 않도록하기 위해 무슨 짓을

    .

  2. Interface Builder에서 렌더링하기 위해 UIView, UIButton (또는 원하는 UIView의 하위 클래스)에서만 상속하는 @IBDesignables를 만들었습니다.

확인 코드 :

extension UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
     get { 
      return layer.cornerRadius 
     } 
     set { 
      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

    @IBInspectable var borderColor: UIColor? { 
     get { 
      return UIColor(cgColor: layer.borderColor ?? UIColor.clear.cgColor) 
     } 

     set { 
      layer.borderColor = newValue?.cgColor 
     } 
    } 

    @IBInspectable var borderWidth: Double { 
     get { 
      return Double(layer.borderWidth) 
     } 

     set { 
      layer.borderWidth = CGFloat(newValue) 
     } 
    } 
} 

@IBDesignable 
class BorderView: UIView { } 

@IBDesignable 
class BorderButton: UIButton { } 

내가 희망이 당신 도움이!