Как вызвать UIViewController из SwiftUI - PullRequest
0 голосов
/ 31 января 2020

У меня есть SwiftUI TabView, со вторым элементом вкладки, который должен отображать UIViewController. Как я могу встроить UIViewController в эту вторую вкладку?

class MyUIVC: UIViewController {.....}

Ниже приведен псевдокод того, что я хочу:

struct myTabView: View {
@State var selectedTab: Int = 0
var body: some View {
    mySwiftUIView
      .tabItem { Text("First Tab") }
      .tag(0)

    MyUIVC //This is what I want to do with my UIViewController
      .tabItem { Text("Second Tab") }
      .tag(1)
 }
 }

1 Ответ

0 голосов
/ 31 января 2020

Вам необходимо соединить ViewController с помощью UIViewControllerRepresentable.. Apple предоставляет документацию о том, как использовать это здесь:

https://developer.apple.com/documentation/swiftui/uiviewcontrollerrepresentable

Кроме того, есть рабочий пример этого в их уроках SwiftUI, особенно урок под названием " Интерфейс с UIKit ", который можно найти здесь:

https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit

Пример ViewController, с которым они работают, выглядит следующим образом:


struct PageViewController: UIViewControllerRepresentable {
    var controllers: [UIViewController]

    func makeUIViewController(context: Context) -> UIPageViewController {
        let pageViewController = UIPageViewController(
            transitionStyle: .scroll,
            navigationOrientation: .horizontal)

        return pageViewController
    }

    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
        pageViewController.setViewControllers(
            [controllers[0]], direction: .forward, animated: true)
    }

    class Coordinator: NSObject {
        var parent: PageViewController

        init(_ pageViewController: PageViewController) {
            self.parent = pageViewController
        }
    }
}

Как говорится, сердце и душа соединения ViewController:

1) Создайте структуру с уникальным именем для ViewController, которая наследуется от UIViewControllerRepresentable

2) Реализация функция makeUIViewController(context: Context) с типом возврата UIViewController

3) Реализация функции updateUIViewController(_ uiViewController: YourUIViewController, context: Context) без возврата

4) При необходимости, реализовать класс Coordinator, который наследуется от NSObject, а также любые протоколы делегатов, которые вам нужны.

Существует немного больше в зависимости от того, что вам нужно, чтобы ViewController делал, но это должно направить вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...