思路无非就是自定义一个结构体view实现UIViewRepresentable协议,然后就可以作为一个swiftUI组件进行调用了
1、我们要定义一个CustomView这个名字随便起 struct CustomView : UIViewRepresentable {}
2、在结构体中定义makeUIView和updateUIView方法,在makeUIView中返回UIKit视图
如下
func makeUIView(context: Context) -> UIView {
//定义view内容
let view = UITableView()
view.delegate = self.makeCoordinator()
view.dataSource = self.makeCoordinator()
view.frame = CGRect(x: 0, y: 100, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 100)
return view
}
3、在CustomView中定义一个class实现UITableViewDelegate和UITableViewDataSource协议
class Controller : NSObject,UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView .dequeueReusableCell(withIdentifier: "cell")
if (cell == nil) {
cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
return cell ?? UITableViewCell()
}
return cell!
}
}
4、在结构体中添加makeCoordinator方法返回代理
func makeCoordinator() -> Controller {
//添加代理人
return CustomView.Controller()
}
5、在makeUIView中将代理delegate和dataSource赋值给tableView
6、在swiftUI组件中调用CustomView就行
VStack{
CustomView()
}