Поскольку в SwiftUI
еще нет своего элемента WebView
, мы будем использовать WKWebView
, который прекрасно справится с загрузкой веб-приложения или сайта.
В этом цикле статей мы рассмотрим следующие темы:
- Как сделать
WebView
с помощьюWKWebView
и протоколаUIViewRepresentable
вSwiftUI
. - Загрузить веб сайт или веб-приложение в
WebView
. - Взаимодействовать между нативным iOS приложением и web-приложением через функции JavaScript.
- Перехватывать каждый переход (навигацию) веб-сайта или веб-приложения в приложении iOS.
- Перезагружать WebView и осуществлять переход вперед и назад.
- Загружать локальный файл .html из iOS-проекта в WebView
Проект доступен на Github. Добавляйте его в закладки, чтобы следить за изменениями. Шаг за шагом мы будем реализовывать новую функциональность. Коммиты ответствуют заголовкам в статье, в которых приведены примеры кода.
Создаем свой WebView
Пару слов о UIViewRepresentable
Протокол UIViewRepresentable
– это обертка для UIKit View
, благодаря которой мы можем интегрировать любую View
из UIKit
.
Процесс адаптации прост и занимает четыре шага:
- Создаем структуру которая реализует протокол
UIViewRepresentable
. - Определяем необходимые свойства для своей
View
и т.п. - В функции
makeUIView()
возвращаем любойUIView
объект. - В функции
updateUIView()
обновляемView
.
Вот и все, теперь вы можете использовать свой View
в SwiftUI
.
Вот небольшой скелет обертки:
Также, для взаимодействия между UIKit
и SwiftUI View
вам может потребоваться написать класс Coordinator
.
struct WebView
Создадим структуру WebView
, но прежде проведем небольшую подготовку:
- Зададим действия для определения веб-навигации (вперед, назад и перезагрузка).
- Опишем типы загружаемых URL (локальный файл, публичный адрес).
Поскольку проект будет расти, мы сразу создадим группу Web
и будем добавлять туда все связанное с вебом. Я создал для каждого перечисления отдельный файл.
Добавим WebView
в ContentView
и протестируем созданный код.
В следующей части цикла мы научим WebView
взаимодействовать со SwiftUI
и напишем несложный интерфейс для веб-навигации, а в третьей части разберемся с JavaScript.
Happy code!
Дополнительные материалы:
Комментарии