Перейдите к UIViewController из SwiftUI - PullRequest
0 голосов
/ 07 марта 2020

Мое начальное представление построено с использованием SwiftUI.

Я бы хотел перейти от этого к UIViewController и вызвать метод, который может изменить дизайн, например, скрытие IBOutlet.

Вот что я сейчас делаю:

@available(iOS 13.0, *)
struct DetailViewControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = DetailViewController

    func makeUIViewController(context: UIViewControllerRepresentableContext<DetailViewControllerWrapper>) -> DetailViewControllerWrapper.UIViewControllerType {

        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let detailViewController: DetailViewController = mainStoryboard.instantiateViewController(withIdentifier: "detailViewController") as! DetailViewController
        detailViewController.someMethod()
        return detailViewController
    }

    func updateUIViewController(_ uiViewController: DetailViewControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<DetailViewControllerWrapper>) {
        //
    }
}

Это выдвигается на мой DetailViewController, но я получаю ошибку Unexpectedly found nil while implicitly unwrapping an Optional value.

Любые советы по навигации из SwiftUI для UIKit / UIViewController?

1 Ответ

0 голосов
/ 07 марта 2020

Часть работы с UIViewRepresentable вызывает требуемый забавный c, называемый makeCoordinator(), как указано здесь в документах. У Apple также есть руководство по взаимодействию с UIKit, которое вы можете найти здесь . Еще один урок от Пола Хадсона здесь также может быть полезен для вас. Я использовал шаблон координатора из него, чтобы обеспечить UIImagePickerController в приложении SwiftUI, над которым я работаю. Этот код ниже. Вы заметите вложенный класс, который обеспечивает функциональность, необходимую мне для UIImagePickerController, в вашем случае я считаю, что вам просто нужно вызвать DetailViewController. Надеюсь, это поможет. -Дан

import SwiftUI

class PhotosData: NSObject, Codable {
    var image: String?

    init(image: String) {
        self.image = image
      }
    }

struct ImagePicker: UIViewControllerRepresentable {
    @Environment(\.presentationMode) var presentationMode
    @Binding var image: UIImage?

class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    let parent: ImagePicker

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let uiImage = info[.originalImage] as? UIImage {
            parent.image = uiImage
        }
        parent.presentationMode.wrappedValue.dismiss()
    }

    init(_ parent: ImagePicker) {
        self.parent = parent
        }
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        let picker = UIImagePickerController()
        picker.delegate = context.coordinator
        return picker
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) { 
    /*Required. Not used*/ 
        }

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