Skip to content

Instantly share code, notes, and snippets.

@TuenTuenna
Last active September 3, 2021 07:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TuenTuenna/b59b502e2c319770f2ec476ff55b1957 to your computer and use it in GitHub Desktop.
Save TuenTuenna/b59b502e2c319770f2ec476ff55b1957 to your computer and use it in GitHub Desktop.
ios_swiftui_webview_control_snippet

SwiftUi 웹뷰 기본적인 세팅입니다!

import SwiftUI
import WebKit

// swiftui 자체 웹뷰가 아직 없기 때문에 UIView representable 상속 받아 만들기 
struct MyWebView: UIViewRepresentable {
    
    let request : URLRequest
    
    // 웹뷰 
    private var webView: WKWebView?
    
    //
    init(request: URLRequest) {
        self.webView = WKWebView()
        self.request = request
    }
    
    func makeUIView(context: Context) -> WKWebView {
        return webView!
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(request)
    }
    
    // 뒤로가기 
    func goBack(){
        webView?.goBack()
    }
    
    // 앞으로 
    func goForward(){
        webView?.goForward()
    }
    
    // 새로고침 
    func refresh() {
        webView?.reload()
    }
    
    // 원래 request url로 이동 
    func goHome() {
        webView?.load(request)
    }
    
}


struct ContentView: View {
    let webView = MyWebView(request: URLRequest(url: URL(string: "https://www.naver.com")!))
    
    var body: some View {
        VStack {
            webView
            HStack{
                Spacer()
                Button(action: {
                    self.webView.goBack()
                }, label: {
                    Image(systemName: "arrowtriangle.left.fill")
                        .font(.title)
                        .foregroundColor(.blue)
                        .padding()
                })
                Spacer()
                Button(action: {
                    self.webView.goHome()
                }, label: {
                    Image(systemName: "house.fill")
                        .font(.title)
                        .foregroundColor(.blue)
                        .padding()
                })
                Spacer()
                Button(action: {
                    self.webView.refresh()
                }, label: {
                    Image(systemName: "arrow.clockwise.circle.fill")
                        .font(.title)
                        .foregroundColor(.blue)
                        .padding()
                })
                Spacer()
                Button(action: {
                    self.webView.goForward()
                }, label: {
                    Image(systemName: "arrowtriangle.right.fill")
                        .font(.title)
                        .foregroundColor(.blue)
                        .padding()
                })
                Spacer()
            } // HStack
        }//VStack
    }
    
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment