Взаимодействие SwiftUI с вебом. Часть первая: WebView
Рутинная задача, без которой не обходится ни один проект – взаимодействие нативных приложений iOS со всемирной паутиной. В первой статье цикла разбираемся, как загружать веб-приложения в SwiftUI Views. СПОЙЛЕР: дальше будут рассмотрены более сложные темы. Обсудить Поскольку в В этом цикле статей мы рассмотрим следующие темы: Проект доступен на Github. Добавляйте его в закладки, чтобы следить за изменениями. Шаг за шагом мы будем реализовывать новую функциональность. Коммиты ответствуют заголовкам в статье, в которых приведены примеры кода. Протокол Процесс адаптации прост и занимает четыре шага: Вот и все, теперь вы можете использовать свой Вот небольшой скелет обертки: Также, для взаимодействия между Создадим структуру WebViewNavigationAction.swift URLType.swift Поскольку проект будет расти, мы сразу создадим группу Отлично! Мы подготовились и изучили базовые моменты. Теперь давайте проверим все на примере и напишем наш WebView. WebView.swift Добавим В следующей части цикла мы научим Happy code! Дополнительные материалы:SwiftUI
еще нет своего элемента WebView
, мы будем использовать WKWebView
, который прекрасно справится с загрузкой веб-приложения или сайта.WebView
с помощью WKWebView
и протокола UIViewRepresentable
в SwiftUI
.WebView
.Создаем свой WebView
Пару слов о UIViewRepresentable
UIViewRepresentable
– это обертка для UIKit View
, благодаря которой мы можем интегрировать любую View
из UIKit
. UIViewRepresentable
.View
и т.п.makeUIView()
возвращаем любой UIView
объект.updateUIView()
обновляем View
.View
в SwiftUI
.
struct myView: UIViewRepresentable { func makeUIView(context: Context) -> some UIView { // Return the UIView object } func updateUIView(_ uiView: some UIView, context: Context) { // Update the view } }
UIKit
и SwiftUI View
вам может потребоваться написать класс Coordinator
. struct WebView
WebView
, но прежде проведем небольшую подготовку:
enum WebViewNavigationAction { case backward, forward, reload }
enum URLType { case local, `public` }
Web
и будем добавлять туда все связанное с вебом. Я создал для каждого перечисления отдельный файл.
import Foundation import SwiftUI import Combine import WebKit import UIKit struct WebView: UIViewRepresentable { var type: URLType var url: String? func makeUIView(context: Context) -> WKWebView { let preferences = WKPreferences() let configuration = WKWebViewConfiguration() configuration.preferences = preferences let webView = WKWebView(frame: CGRect.zero, configuration: configuration) webView.allowsBackForwardNavigationGestures = true webView.scrollView.isScrollEnabled = true return webView } func updateUIView(_ webView: WKWebView, context: Context) { if let urlValue = url { if let requestUrl = URL(string: urlValue) { webView.load(URLRequest(url: requestUrl)) } } } }
WebView
в ContentView
и протестируем созданный код.WebView
взаимодействовать со SwiftUI
, и напишем несложный интерфейс для веб-навигации.
- 1 views
- 0 Comment
Свежие комментарии