将 UIViewRepresentable 用于自定义组件不起作用

Posted

技术标签:

【中文标题】将 UIViewRepresentable 用于自定义组件不起作用【英文标题】:Use UIViewRepresentable for custom components not working 【发布时间】:2020-05-26 14:10:34 【问题描述】:

我使用 UIKit 在 Swift 中编写了很多组件。我现在想在 SwiftUI 中使用这个自定义组件。我使用 UIViewRepresentable 创建了一个结构:

struct MyIcon: UIViewRepresentable 
    func makeUIView(context: Context) -> HUIIconView 
        return HUIIconView()
    

    func updateUIView(_ uiView: UITextView, context: Context) 
    

我的 HUIIconView 是这样定义的:

@IBDesignable @objc public class HUIIconView: UIView

Xcode 给我以下错误:

类型“MyIcon”不符合协议“UIViewRepresentable”

这种方法适用于 Apple 自己的组件,如 UITextView,但不适用于自定义组件。 如何在 SwiftUI 中使用我自己的组件?

【问题讨论】:

【参考方案1】:

在这里(使用 Xcode 11.4 测试)

@IBDesignable @objc public class HUIIconView: UIView 



struct MyIcon: UIViewRepresentable 
    func makeUIView(context: Context) -> HUIIconView 
        return HUIIconView()
    

    func updateUIView(_ uiView: HUIIconView, context: Context) 
    

【讨论】:

谢谢,这个错误误导了我。我只是忘记在 updateUIView() 中用 HUIIconView 替换 UITextView。

以上是关于将 UIViewRepresentable 用于自定义组件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

协调器不适用于 UIViewRepresentable?

SwiftUI MapKit UIViewRepresentable 无法显示警报

带有 UIViewRepresentable 的 SwiftUI 自定义文本字段 ObservableObject 和推送视图的问题

如何找到 SwiftUI UIViewRepresentable 的框架

SwiftUI - 使用自定义绘图包装 UIView 时出现 UIViewRepresentable 故障

TableView 重新加载不适用于 SwiftUI 中的 UIViewRepresentable