How to integrate UIKit UIViewController in few line of code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
// // RedVC.swift // SwiftUIOne // // Created by dejaWorks on 14/01/2020. // Copyright © 2020 dejaWorks. All rights reserved. // #if canImport(SwiftUI) && DEBUG import SwiftUI #endif import UIKit // MARK: - An ordinary VC /// VC (UIKit UIViewController) class RedVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() view = RedV() } } // MARK: - An ordinary View of the VC /// V (UIKit UIView) class RedV: UIView { override init(frame: CGRect) { super.init(frame: frame) setupUI() } required init?(coder: NSCoder) { fatalError("Not implemented.") } lazy var segment:UISegmentedControl = { let s = UISegmentedControl(items: ["One", "Two"]) s.frame.size.width = 320 s.frame.size.height = 50 return s }() func setupUI(){ addSubview(segment) backgroundColor = .systemPink } } // MARK: - The VC integrator /// RedIC (SwiftUI UIViewController Integrator) @available(iOS 13.0, *) struct RedIC: UIViewControllerRepresentable { func makeUIViewController(context: UIViewControllerRepresentableContext<RedIC>) -> RedVC { return RedVC() } func updateUIViewController(_ uiViewController: RedVC, context: UIViewControllerRepresentableContext<RedIC>) { } } // MARK: - An ordinary SwiftUI view @available(iOS 13.0, *) struct RedSampleView:View { var body: some View { // A //Here (UIKit made RedVC) RedIC is integtating like SwiftUI item RedIC() // B // Here some ordinary SwiftUI elements to test preview first. // List{ // Text("Test 123,") // Text("Test 456,") // Text("Test 789.") // } } } // A Preview SwiftUI @available(iOS 13.0, *) struct RedSamplePreview: PreviewProvider{ static var previews: some View{ RedSampleView().previewDevice(.init(stringLiteral: "iPhone 11")) } } |