안녕하세요
오늘은 Swift에서 사용되는 웹뷰에서 공통으로 사용할 수 있는 공통 모듈을 만드는 작업을 확인해 보겠습니다.
이 작업은 하나의 프로젝트에서 하나의 웹뷰 혹은 여러개의 웹뷰를 사용할 때
전역으로 공통적으로 사용할 수 있게 모듈을 만들어서 그 모듈을 통해 데이터를 전달하고 또한 이벤트는 진행하는 프로세스입니다.
일단 WKWebview를 가지고 있는 Class 하나를 만들어주고
commonWebViewProcess란 Class 안에 공통적으로 적용할 기능들 func들을 필요에 따라 넣어준다.
하나의 예시로 코딩을 작성해 보았다.
class commonWebViewProcess: UIViewController, WKNavigationDelegate, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webConfiguration.allowsInlineMediaPlayback = true
webConfiguration.mediaTypesRequiringUserActionForPlayback = []
// 웹뷰 초기화
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// 기본 URL 로드 함수 호출 예제
if let url = URL(string: "https://example.com") {
loadURL(url)
}
}
// URL을 로드하는 함수
func loadURL(_ url: URL) {
let request = URLRequest(url: url)
webView.load(request)
}
// JavaScript 실행 함수
func executeJavaScript(_ script: String, completion: ((Any?, Error?) -> Void)? = nil) {
webView.evaluateJavaScript(script, completionHandler: completion)
}
// WKNavigationDelegate 예제 (페이지 로드 완료 시 호출)
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("페이지 로드 완료")
}
// WKUIDelegate 예제 (JavaScript 경고 처리)
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: { _ in
completionHandler()
}))
present(alert, animated: true, completion: nil)
}
// 웹 페이지 이동
func goBack() {
if webView.canGoBack {
webView.goBack()
}
}
func goForward() {
if webView.canGoForward {
webView.goForward()
}
}
// 새로고침
func reloadPage() {
webView.reload()
}
- CommonWebView 클래스를 초기화하고 URL을 로드하여 사용할 수 있다.
- executeJavaScript(_:completion:) 함수를 호출해 JavaScript 코드를 실행할 수 있다.
- goBack(), goForward(), reloadPage() 등을 사용하여 웹 탐색을 제어할 수 있다.
이제 CommonWebView를 다른 화면에서도 재사용할 수 있으며, 이 클래스에 다양한 WKWebView 관련 기능을 추가해 필요한 기능을 확장할 수 있다.
또한
commonWebViewProcess 필요에 따라 아래처럼 선언 후 필요항목을 가져와 쓸 수 있어
let apptoWebSendJS: commonWebViewProcess = commonWebViewProcess()
어디에서나 편안히 재사용이 가능하여 코딩 효율을 줄여준다. 끝
'iOS, Swift 개발' 카테고리의 다른 글
구글 애드몹(AdMob) 광고로 수익내기(iOS앱 초기 세팅,예제) (1) | 2024.11.14 |
---|---|
Swift 하드 코딩, 날코딩 관리 (3) | 2024.11.11 |
iOS WebView DownLoad 이미지 (data:image/png;base64) (3) | 2024.09.19 |
swift WkWebView 이미지 UIImageWriteToSavedPhotosAlbum 다운로드 및 저장 (0) | 2024.08.22 |
Swift 스키마(scheme) 처리 및 웹뷰 처리(WKWebView evaluateJavaScript) (0) | 2024.08.09 |