見出し画像

SwiftUIでいこう! - ViewControllerを使う。

SwiftUIが出て3年ぐらいが経ってだいぶ使えるようになっていますが、まだUIKit を使わないといけない、使いたいことがあると思います。

UIKitをSwiftUIで使えるように用意されたプロトコルを使います。

この中で説明されていて大事なことはUIViewControllerRepresentableプロトコルに準拠させて以下の3項目に関しては必ず記述しないといけません、

struct ViewControllerWrapper : UIViewControllerRepresentable {

 typealias UIViewControllerType = UIViewController

 func makeUIViewController(context: Context) -> UIViewController {
   return  ViewController()
 }


 func updateUIViewController(_ uiViewController: UIViewController,    context: Context) {
 }
}

全体です。

import SwiftUI

struct ContentView: View {
    var body: some View {
        
        ViewControllerWrapper()
        
    }
}

struct ViewControllerWrapper : UIViewControllerRepresentable {
    typealias UIViewControllerType = UIViewController
    func makeUIViewController(context: Context) -> UIViewController {
        return ViewController()
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
        
    }
}


ViewControllerは普通にUIKitで使える形で別ファイルでも、同じファイルに書いても大丈夫です。以下のもはviewのバックグラウンドが赤くなります。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.red
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}


UIKit で作られたものでもこの仕組みを使えば簡単にSwiftUIに変換して表示することができます。




この記事が気に入ったらサポートをしてみませんか?