์ฐ๋ฆฌ๋ ๋ ธ์ ์นํ์ด์ง๋ก ๋ ๊ฐ์ ์์ธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค. (<๊ด๊ณ ๋ฐ ๋ง์ผํ ์์ ์ ๋์> ํ์ด์ง๋ ํ์ฌ ์ ์ธ๋์๋ค.)
๊ฐ์ ํ์์ ๋ทฐ์, title๊ณผ WebView์ ๋งํฌ๋ง ๋ฐ๋๋ค. ๋ค๋ง ์ฌ๊ธฐ์ <๋์> ๋ฒํผ์ ๋๋ ์ ๋, ๋ฐ๊นฅ์ ์ฝ๊ด ์ ํ ํ์ด์ง์์๋ ํด๋น <๋์> ํ์๊ฐ ๋ฐ์๋์ด์ผ ํ๋ค. ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ๋ค๊ฐ, ์์ 3๊ฐ ํ์ด์ง๊ฐ ์ ๋ถ ๊ฐ์ ๋ทฐ๋ชจ๋ธ์ ๊ณต์ ํ์ฌ ์ํ ๊ฐ๋ค์ ์ ๋ฌ๋ฐ์ ์ ์๋๋ก ๊ตฌํํ๋ค.
WKWebView ์ฌ์ฉ
WebView์ ๊ตฌํ ๋ฐฉ์์์๋ 3๊ฐ์ง๊ฐ ์๋ค.
1. WKWebKit
2. open safari
3. SFSafariViewController
๋๋ ์ด ์ค์์๋ ๋ซ๊ธฐ ๋ฒํผ์ ์ปค์คํ ํ๊ณ , ๋ฐ๋ก ์น์์ ์์ ํ ๊ฒ ์์ด ์ฑ ๋ด์์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ ๊ฒ์ด๊ธฐ์ WKWebKit์ ์ฌ์ฉํ์๋ค. ๋ ธ์ ์ผ๋ก ์ฝ๊ด์ ์ ์ํ๋๋ฐ, ์ฝ๊ด์ ๋ด์ฉ์ด ์์ ๋์์ ๋ ๊ตณ์ด ์ฑ์ ์ ๋ฐ์ดํธ ํ์ง ์๋๋ผ๋ ์์ ๋ ๋ด์ฉ์ ๋ณด์ฌ์ค ์ ์๋๋ก html๊ณผ ์น๋งํฌ ์ค์์๋ ์น๋งํฌ๋ฅผ ์ฌ์ฉํ๋ค.
import UIKit
import WebKit
import Combine
class TermsDetailViewController: UIViewController {
//๋ณด์ฌ์ค ์น๋ทฐ
private let webView: WKWebView = {
let configuration = WKWebViewConfiguration()
let view = WKWebView(frame: .zero, configuration: configuration)
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let agreeButton = NextButton(title: "๋์", backgroundColor: .roomeMain, tintColor: .white)
let viewModel: TermsAgreeViewModel
var cancellable = Set<AnyCancellable>()
init(viewModel: TermsAgreeViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
configureAgreeButton()
configureWebView()
bind()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//๋ทฐ๊ฐ ๋ณด์ผ ๋๋ง๋ค webViewLoading update
loadWebView()
}
func bind() {
agreeButton.publisher(for: .touchUpInside)
.eraseToAnyPublisher()
.sink { [weak self] _ in
self?.viewModel.input.handleDetail.send()
self?.dismiss(animated: true)
}
.store(in: &cancellable)
}
private func configureAgreeButton() {
view.addSubview(agreeButton)
NSLayoutConstraint.activate([
agreeButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
agreeButton.heightAnchor.constraint(equalToConstant: 50),
agreeButton.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.9),
agreeButton.centerXAnchor.constraint(equalTo: view.centerXAnchor)
])
}
//์น๋ทฐ ์์น ์ก๊ธฐ
private func configureWebView() {
view.addSubview(webView)
NSLayoutConstraint.activate([
webView.topAnchor.constraint(equalTo: titleLabel.bottomAnchor),
webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
webView.bottomAnchor.constraint(equalTo: agreeButton.topAnchor, constant: -8)
])
}
private func loadWebView() {
//์น ๋งํฌ ๋์ฐ๊ธฐ
let link = viewModel.detailState.link
guard let url = URL(string: link) else {
return
}
let request = URLRequest(url: url)
webView.load(request)
}
}
titleLabel, closeButton๊ณผ ๊ฐ์ ๋ถ๋ถ์ ์ฝ๋์์ ์ ์ธํ๋ค. (๋ก์ง๊ณผ๋ ์๊ด ์๋ ์ฝ๋๋๊น)
ํด๋ฆญ ํ ๋ ๋ทฐ๋ชจ๋ธ ์ํ ๋ณํ
TermsDetailViewController๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ TermsAgreeViewController์์ viewModel์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ํ TermsDetailViewController๋ฅผ ๋ถ๋ฅด๋ ๋ฐฉ๋ฒ์ ํตํด ํด๋น ViewController๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์๋ค.
serviceAgreeButton.tappedDetailButtonPublisher()
.sink { [weak self] _ in
self?.viewModel.detailState = .service
let detailView = DIContainer.shared.resolve(TermsDetailViewController.self)
detailView.modalPresentationStyle = .fullScreen
self?.view.window?.rootViewController?.present(detailView, animated: true)
}.store(in: &cancellable)
personalInformationAgreeButton.tappedDetailButtonPublisher()
.sink { [weak self] _ in
self?.viewModel.detailState = .personal
let detailView = DIContainer.shared.resolve(TermsDetailViewController.self)
detailView.modalPresentationStyle = .fullScreen
self?.view.window?.rootViewController?.present(detailView, animated: true)
}.store(in: &cancellable)
https://github.com/Prography-RoomE/roome_ios/pull/39
[FEAT] ์ฝ๊ด ๋์ ์์ธ ํ์ด์ง ๊ตฌํ by mint3382 · Pull Request #39 · Prography-RoomE/roome_ios
๐ ์์ ์ค๋ช ์ด์ฉ์ฝ๊ด ์์ธ ๋ ธ์ ํ์ด์ง ์น๋ทฐ๋ก ๋์์ ๊ตฌํ ์์ธ ํ์ด์ง์์ ๋์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฝ๊ด ๋์ํ ๊ฒ์ผ๋ก ์ด์ฉ์ฝ๊ด ํ์ด์ง์ ๋ฒํผ ์ํ๋ ๊ฐ์ด ๋ณ๋ ๐ฅ ํธ๋ฌ๋ธ ์ํ 1๏ธโฃ. WebView
github.com
https://apps.apple.com/kr/app/roome/id6503616766
roome
๋ฐฉ ํ์ถ ํ๋กํ ์ ์ ์๋น์ค ๋ฃจ๋ฏธ๋ฅผ ํตํด ๋์ ์ฑํฅ์ ๋น ๋ฅด๊ฒ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด ๋ณด์ธ์. ๋ฃจ๋ฏธ๋ ๋ฐฉ ํ์ถ์ ์ข์ํ๋ ์ฌ๋๋ค์ด ๋์ ์ทจํฅ์ ๋ด์ ํ๋กํ์ ์ด๋ฏธ์ง 1์ฅ์ผ๋ก ๋ง๋ค ์ ์๋ ์๋น์ค
apps.apple.com