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视图
项目中添加要集成的SwiftUI view文件
设置Hosting Controller,为其设置rootView,rootView就是SwiftUI view
SwiftUI项目中使用view controller
将view controller文件加入项目中
为加入的vc创建一个representation strut,实现makeUIViewController和updateUIViewController两个方法
在SwiftUI中使用NavigationLink控件,设置desitination为第二步创建的Representation实例
将SwiftUI包裹在NavigationView中
预览UIKit视图
在VC中,添加一个如下strut即可
#if DEBUG
struct ViewControllerPreviews: PreviewProvider {
static var previews: some View {
ViewControllerRepresentation()
}
}
#endif
SwiftUI中使用带有数据依赖关系的UIView视图
创建一个继承了UIViewRepresentable协议的SwiftUI view
实现make方法,初始化uiview
实现update方法,通过SwiftUI view来更新UIKit view
创建一个Coordinate,实现valueChanged方法,通过UIKit view来更新SwiftUI view