SwiftUI

WebView 당겨서 새로고침(Pull to Refresh) 기능 추가하기

Phililip 2023. 9. 5.
728x90

안녕하세요.

 

이번엔 SwiftUI로 WKWebView에 당겨서 새로고침(Pull to Refresh. 줄여서 PTR) 기능을 추가한 WebView 코드를 공유할게요

 


import SwiftUI
import WebKit
struct WebView: UIViewRepresentable {
let url: String
func makeUIView(context: Context) -> WKWebView {
let webview = WKWebView(frame: .zero)
let refreshControl = UIRefreshControl()
refreshControl.tintColor = .secondaryLabel
refreshControl.transform = CGAffineTransformMakeScale(0.7, 0.7); // indicator 크기 줄이기
refreshControl.addTarget(webview, action: #selector(WKWebView.webViewPullToRefreshHandler(source:)), for: .valueChanged)
webview.scrollView.refreshControl = refreshControl
webview.scrollView.bounces = true
return webview
}
func makeCoordinator() -> Coordinator {
return Coordinator(parent: self)
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.navigationDelegate = context.coordinator
uiView.load(URLRequest(url: URL(string: self.url)!))
}
class Coordinator: NSObject, WKNavigationDelegate {
let parent: WebView
init(parent: WebView) {
self.parent = parent
}
}
}
extension WKWebView {
@objc func webViewPullToRefreshHandler(source: UIRefreshControl) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.7) {
self.reload()
source.endRefreshing()
}
}
}
view raw WebView.swift hosted with ❤ by GitHub

 

아래는 사용 예시입니다.

 

struct ContentView: View {
var body: some View {
WebView(url: "https://www.naver.com")
}
}

 


이번 글은 여기서 마무리.

 

 

 

반응형

'SwiftUI' 카테고리의 다른 글

TCA(10) : Custom Dependency  (1) 2023.10.10
TCA(9) : Dependency  (0) 2023.10.01
TCA(8) : Binding  (1) 2023.08.09
TCA(7) : 0.54.0 -> 1.0.0 업데이트  (0) 2023.08.07
TCA(6) : WebView  (0) 2023.07.28