UIKit - MVC 패턴 View 구현
UIKit - MVC 패턴 View 구현
MVC 패턴 View 구현
MVC(Model View Controller) 패턴에서 화면을 담당하는 View를 구현할 떄는 UIView 클래스를 상속해서 처리해야함.
BasicView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import UIKit
class BasicView: UIView {
private let exLabel: UILabel = {
let label = UILabel()
label.text = "Hello World!"
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
setupConstraint()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
fatalError()
}
func setupUI(){
self.backgroundColor = .white
addSubview(exLabel)
}
func setupConstraint(){
exLabel.translatesAutoresizingMaskIntoConstraints = false
exLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
exLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
}
}
이때 두 가지 생성자를 필수적으로 구현해줘야함.
1
2
3
4
5
6
7
8
9
10
11
12
// 코드로 뷰를 만들 때 사용되는 생성자
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
setupConstraint()
}
// 스토리보드로 뷰를 만들 때 사용되는 생성자
required init?(coder: NSCoder) {
super.init(coder: coder)
fatalError() // 코드로만 구현했을 경우 호출될 일이 없기 때문에 만약 호출될 경우 앱이 죽도록 구성
}
UIView를 상속받은 커스텀 뷰는 코드로 생성될 수도 있고, 스토리보드에서 생성될 수도 있기 때문에 두 생성자를 모두 구현해야 함.
ViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import UIKit
class ViewController: UIViewController {
let basicView = BasicView()
override func loadView() {
self.view = basicView
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
loadView()를 오버라이드해서 ViewController의 루트 뷰를 직접 교체하면, 커스텀 UIView가 메모리에 로드될 때 자동으로 화면에 표시됨.
결과
This post is licensed under CC BY 4.0 by the author.
