iOS/UIKit

[iOS / UIKit] How to use PreviewProvider in UIKit

TDCIAN 2023. 2. 12. 22:08

How to use PreviewProvider in UIKit

 

안녕하세요! 

오늘은 UIKit에서 PreviewProvider를 사용하는 방법을 알아봅시다!

 

PreviewProvider는 SwiftUI에서만 사용할 수 있는 게 아닌가 생각하실 수 있겠지만

UIKit에서도 활용할 수 있습니다!

 

일단 사진부터 보시죠!

드래그 해 둔 부분이 PreviewProvider를 활용한 부분입니다!

 

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

 

 

전체 코드도 보여드리겠습니다!

 

 

 

// 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