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