ios

[ios - Swift] UIView.Xib 사용하기

POKY_0908 2020. 11. 24. 23:00

 

 

 

지난 글에서는 UITableViewCell을 Xib 파일로 생성해 사용하는 것을 배웠습니다.

 

이번 글에서는 UIView를 Xib로 만들어서 사용할 수 있도록 해보겠습니다.

 

 

1. 파일 생성

 

 

Swift 파일을 생성합니다.

 

그런데 UITableViewCell을 만들 때와 다르게 Xib File을 생성할 수 없어서 Xib 파일 또한 생성해 줘야 합니다.

 

 

 

 

 

View를 선택 후 알아보기 쉽게 Swift 파일과 동일한 이름으로 생성합니다.

 

 

 

2. Xib 구성

 

 

View.xib 파일을 열어보면 위 이미지와 같은 것을 확인할 수 있는데 이제 화면을 꾸며보도록 하겠습니다.

 

 

View를 선택 후 Attributes inspector -> Size -> Freeform으로 선택 후 원하는 사이즈로 변경 후 인터페이스를 추가해 줍니다.

 

 

 

저는 테이블 뷰에 섹션으로 사용하기 위해서 섹션 타이틀과 버튼을 추가했습니다.

 

이제 xib 파일을 Swift와 연결하도록 합니다.

 

 

 

Files owner -> Attuributes inspector -> Class에서 이전에 생성한 Swift 파일과 연결합니다.

 

 

 

3. Swift 코드 추가

만들어 둔 Swift 파일을 열어 다음과 같이 코드를 추가합니다.

 

import UIKit

@IBDesignable
class SectionView: XibUIView {
    @IBOutlet weak var mTitle: UILabel!
    
    @IBOutlet weak var mActionBtn: UIButton!
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}

 

class XibUIView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        configure()
    }

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

    private func configure() {
        let className = String(describing: type(of: self))
        guard let view = self.loadViewFromNib(nibName: className) else {
            return
        }

        view.frame = self.bounds
        self.addSubview(view)
    }
}

extension UIView {
    func loadViewFromNib(nibName: String) -> UIView? {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: nibName, bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
}

 

 

 

프로젝트 내에서 아래와 같이 사용하면 됩니다.

let view = SectionView()