UIKit与SwiftUI的集成

UIKit与SwiftUI的集成

SwiftUI是iOS13中推出的一个全新的框架,它采用声明式的UI布局,并且有数据与视图同步更新,一套视图多平台使用等很多优点。但是,目前大部分项目仍然使用的是UIKit来进行布局,大规模使用SwiftUI并不现实,但是我们仍然可以在某些地方,局部的少量使用SwiftUI,或者另外一个场景是在SwiftUI中使用UIKit中编写的一些控件,这就需要我们学会UIKit和SwiftUI之间的集成了。

当我们讨论SwiftUI的集成的时候,你将会听到托管这个词。UIKit App可以托管SwiftUI的视图,SwiftUI App同样也可以托管UIKit的视图

本篇将讨论下面几个内容

  • 在一个UIKit的项目中托管一个SwiftUI的view

  • 在一个SwiftUI的项目中托管一个vc

  • 在一个SwiftUI的项目中托管一个带有数据依赖关系的UIKit视图

UIKit中使用SwiftUI视图

  1. 项目中添加要集成的SwiftUI view文件

  2. 设置Hosting Controller,为其设置rootView,rootView就是SwiftUI view

SwiftUI项目中使用view controller

  1. 将view controller文件加入项目中

  2. 为加入的vc创建一个representation strut,实现makeUIViewController和updateUIViewController两个方法

  3. 在SwiftUI中使用NavigationLink控件,设置desitination为第二步创建的Representation实例

  4. 将SwiftUI包裹在NavigationView中

image

预览UIKit视图

在VC中,添加一个如下strut即可

#if DEBUG 
struct ViewControllerPreviews: PreviewProvider {
    static var previews: some View {
        ViewControllerRepresentation()
    } 
}
#endif

SwiftUI中使用带有数据依赖关系的UIView视图

  1. 创建一个继承了UIViewRepresentable协议的SwiftUI view

  2. 实现make方法,初始化uiview

  3. 实现update方法,通过SwiftUI view来更新UIKit view

  4. 创建一个Coordinate,实现valueChanged方法,通过UIKit view来更新SwiftUI view

你可能感兴趣的:(UIKit与SwiftUI的集成)