美文网首页SwiftUI
UIViewRepresentable

UIViewRepresentable

作者: Small_Potato | 来源:发表于2020-10-21 16:01 被阅读0次

    在SwiftUI中,有时候我们需要用一些SwiftUI中不存在但是UIKit已有的View的时候,可以考虑使用包装已有的UIView类型,然后提供给SwiftUI使用。
    例如,在SwiftUI中使用UISearchBar

    protocol UIViewRepresentable : View
        associatedtype UIViewType : UIView
        func makeUIView(context: Self.Context) !" Self.UIViewType
        func updateUIView(
            _ uiView: Self.UIViewType,
            context: Self.Context
        )
    }
    

    makeUIView(context:) 需要返回想要封装的 UIView 类型,SwiftUI 在创建一个被封 装的 UIView 时会对其调用。updateUIView(_:context:) 则在 UIViewRepresentable 中的某个属性发生变化,SwiftUI 要求更新该 UIKit 部件时被调用

    创建一个SearchBar

    struct SearchBar : UIViewRepresentable {
        
        @Binding var text : String
        
        class Cordinator : NSObject, UISearchBarDelegate {
            
            @Binding var text : String
            
            init(text : Binding<String>) {
                _text = text
            }
            
            func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
                text = searchText
            }
        }
        
        func makeCoordinator() -> SearchBar.Cordinator {
            return Cordinator(text: $text)
        }
        
        func makeUIView(context: UIViewRepresentableContext<SearchBar>) -> UISearchBar {
            let searchBar = UISearchBar(frame: .zero)
            searchBar.delegate = context.coordinator
            return searchBar
        }
        
        func updateUIView(_ uiView: UISearchBar, context: UIViewRepresentableContext<SearchBar>) {
            uiView.text = text
        }
    }
    
    

    相关文章

      网友评论

        本文标题:UIViewRepresentable

        本文链接:https://www.haomeiwen.com/subject/bazsmktx.html