Как открывать экраны UIKit в SwiftUI и наоборот
При переходе с UIKit на SwiftUI или при интеграции старых экранов UIKit в новый SwiftUI-проект часто возникает необходимость взаимодействия между этими фреймворками. В этой статье рассмотрим, как открывать UIViewController в SwiftUI и наоборот.
Открытие экрана UIKit в SwiftUI
Для интеграции UIViewController в SwiftUI используется UIViewControllerRepresentable.
Шаги:
- Создайте структуру, реализующую UIViewControllerRepresentable.
- Реализуйте методы makeUIViewController(context:) и updateUIViewController(_:context:).
- Используйте эту структуру в SwiftUI как обычное представление.
Пример:
Этот код открывает MyUIKitViewController внутри SwiftUI при нажатии кнопки.
Открытие экрана SwiftUI в UIKit
Для отображения SwiftUI-вью в UIKit используется UIHostingController.
Шаги:
- Создайте UIHostingController, передав в него SwiftUI-вью.
- Отобразите UIHostingController стандартным способом через present или pushViewController.
Пример:
Этот код открывает экран SwiftUI (SwiftUIScreen) из UIKitViewController при нажатии кнопки.
Итог
Интеграция UIKit и SwiftUI возможна в обоих направлениях:
- Для отображения UIViewController в SwiftUI используется UIViewControllerRepresentable.
- Для отображения SwiftUI в UIKit применяется UIHostingController.
Этот подход позволяет постепенно мигрировать приложения с UIKit на SwiftUI или комбинировать оба фреймворка в одном проекте.