develop

IBDesignable, IBInspectable 본문

iOS

IBDesignable, IBInspectable

pikachu987 2020. 12. 30. 20:11
반응형

1. CustomView IBDesignable 만들기

@IBDesignable
class CustomView: UIView {

}

 

2. CustomView에 IBInspectable 추가하기

@IBDesignable
class CustomView: UIView {
    @IBInspectable
    var labelText: String? {
        set {
            self.label.text = newValue
        }
        get {
            return self.label.text
        }
    }

    @IBInspectable
    var labelTextColor: UIColor? {
        set {
            self.label.textColor = newValue
        }
        get {
            return self.label.textColor
        }
    }

    @IBInspectable
    var labelBackgroundColor: UIColor? {
        set {
            self.label.backgroundColor = newValue
        }
        get {
            return self.label.backgroundColor
        }
    }

    private lazy var label: UILabel = {
        let label = UILabel()
        label.font = UIFont.boldSystemFont(ofSize: 22)
        self.addSubview(label)
        label.translatesAutoresizingMaskIntoConstraints = false
        self.addConstraints([
            NSLayoutConstraint(item: self, attribute: .centerX, relatedBy: .equal, toItem: label, attribute: .centerX, multiplier: 1, constant: 0),
            NSLayoutConstraint(item: self, attribute: .centerY, relatedBy: .equal, toItem: label, attribute: .centerY, multiplier: 1, constant: 0),
            ])
        return label
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

    }

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

    }

    override func awakeFromNib() {
        super.awakeFromNib()

    }
}

 

3. Storyboard나 xib에서 사용하기

 

기타

Storyboard나 xib에서 사용할 경우 awakeFromNib가 호출된다.

override func awakeFromNib() {
    super.awakeFromNib()

}

 

코드상에서 아래처럼 사용할 경우에는

let customView = CustomView(frame: CGRect(x:0, y:0, width: 100, height: 100))

 

init이 호출되고 required init?(coder aDecoder: NSCoder) 을 같이 적어주어야 한다.

override init(frame: CGRect) {
    super.init(frame: frame)

}

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

 

Storybard, Xib, 코드에서 다 사용 가능 하게 하려면 아래와 같이 적어 주면 된다.

override func awakeFromNib() {
    super.awakeFromNib()
	self.initViews()
}

override init(frame: CGRect) {
    super.init(frame: frame)
	self.initViews()
}

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

private func initViews() {

}

Storyboard나 xib에서 사용되면 awakeFromNib와 init?가 호출될 것이고

코드에서 사용하면 init() 이 호출된다.

반응형

'iOS' 카테고리의 다른 글

Subscript  (0) 2021.01.01
Swizzling  (0) 2020.12.31
Image Face Detector 사진에서 얼굴 찾기  (0) 2020.12.30
Text Gradation 텍스트에 그라데이션 추가  (0) 2020.12.29
PHAsset  (0) 2020.12.29
Comments