How to use PreviewProvider in UIKit
안녕하세요!
오늘은 UIKit에서 PreviewProvider를 사용하는 방법을 알아봅시다!
PreviewProvider는 SwiftUI에서만 사용할 수 있는 게 아닌가 생각하실 수 있겠지만
UIKit에서도 활용할 수 있습니다!
일단 사진부터 보시죠!

PreviewProvider 부분만 확대해서 다시 보여드리겠습니다!

전체 코드도 보여드리겠습니다!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ViewController.swift | |
// PreviewProviderInUIKit | |
import UIKit | |
import SwiftUI // MARK: You should import SwiftUI to use Preview Provider | |
class ViewController: UIViewController { | |
private lazy var tableView: UITableView = { | |
let tableView = UITableView() | |
tableView.translatesAutoresizingMaskIntoConstraints = false | |
tableView.dataSource = self | |
tableView.delegate = self | |
tableView.register( | |
TableViewCell.self, | |
forCellReuseIdentifier: "TableViewCell" | |
) | |
return tableView | |
}() | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
view.addSubview(tableView) | |
NSLayoutConstraint.activate([ | |
tableView.topAnchor.constraint(equalTo: view.topAnchor), | |
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), | |
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), | |
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor), | |
]) | |
} | |
} | |
extension ViewController: UITableViewDataSource, UITableViewDelegate { | |
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
return 50 | |
} | |
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
guard let cell = tableView.dequeueReusableCell( | |
withIdentifier: "TableViewCell", | |
for: indexPath | |
) as? TableViewCell else { | |
return UITableViewCell() | |
} | |
cell.configCell(index: indexPath.item) | |
return cell | |
} | |
} | |
class TableViewCell: UITableViewCell { | |
private lazy var label: UILabel = { | |
let label = UILabel() | |
label.translatesAutoresizingMaskIntoConstraints = false | |
label.font = .systemFont(ofSize: 14, weight: .bold) | |
label.textColor = .darkGray | |
return label | |
}() | |
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | |
super.init(style: style, reuseIdentifier: reuseIdentifier) | |
contentView.addSubview(label) | |
NSLayoutConstraint.activate([ | |
label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), | |
label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), | |
]) | |
} | |
required init?(coder: NSCoder) { | |
fatalError("init(coder:) has not been implemented") | |
} | |
func configCell(index: Int) { | |
label.text = "cell number: \(index)" | |
} | |
} | |
// Use PreviewProvider | |
struct ViewController_Previews: PreviewProvider { | |
static var previews: some View { | |
Container().edgesIgnoringSafeArea(.all) | |
} | |
struct Container: UIViewControllerRepresentable { | |
func makeUIViewController(context: Context) -> UIViewController { | |
return ViewController() | |
} | |
func updateUIViewController(_ uiViewController: UIViewController, context: Context) { | |
} | |
} | |
} |
UIKit 상황에서 개발한다고 하더라도 PreviewProvider를 활용하시려면
반드시 SwiftUI를 import 해주셔야 합니다!
맥북 성능에 따라 PreviewProvider를 사용하시는 게 시뮬레이터나 실기기를 활용하는 것보다 유리할 수도 있고,
그러지 못할 수도 있으니 현재 상황에 맞춰 사용하시면 될 것 같습니다!
GitHub 링크입니다!
https://github.com/TDCIAN/PreviewProviderInUIKit
GitHub - TDCIAN/PreviewProviderInUIKit
Contribute to TDCIAN/PreviewProviderInUIKit development by creating an account on GitHub.
github.com