【问题标题】:Mapbox autocomplete feature on iOS SwiftUIiOS SwiftUI 上的 Mapbox 自动完成功能
【发布时间】:2021-10-30 12:35:08
【问题描述】:

我正在开发一个基于 swift UI 的 iOS 应用。我想在其中拥有 Mapbox 自动完成功能。我尝试集成 mapbox-search-SDK,但它似乎不支持 swift UI。

有什么我可以做的吗?这有可能吗?我也不可能恢复到另一个地图提供商。提前致谢。

【问题讨论】:

标签: ios swiftui sdk mapbox mapbox-ios


【解决方案1】:

在 UIKit 中完成 Mapbox 搜索用户界面,您可以使用 UIViewRepresentableUIViewControllerRepresentable 包装任何 UIViewUIViewController

这是一个例子:

struct SearchControllerView: UIViewControllerRepresentable {
    typealias UIViewControllerType = MapboxSearchController

    func makeUIViewController(context: Context) -> MapboxSearchController{
        MapboxSearchController()
    }
    func updateUIViewController(_ uiViewController: MapboxSearchController, context: Context) { }
}

struct SearchControllerView_Previews: PreviewProvider {
    static var previews: some View {
        SearchControllerView()
    }
}

【讨论】:

    【解决方案2】:

    显然对于 SwiftUI,您必须使用 Mapbox Geocoding API 自行构建自动完成搜索功能。我做了一些简单的事情,如下图。

    import SwiftUI
    import Alamofire
    
    struct AutocompleteSheet: View {
    
        @State var searchText = ""
        @State var SearchResults:[data]? = nil
    
     var body: some View {
    
            ScrollView {
             
                HStack {
                  TextField(" Search locations", text: $searchText)
                    }
                    .onChange(of: searchText, perform: { value in
                        AutocompleteAPI()
                    })
                 }
    
    if SearchResults != nil {
                        
    ForEach(0..<SearchResults!.count, id: \.self) { index in
    
      HStack {
          Button(action: {
             print("which location: \(index)")
              }) {
                                            
              Image(systemName: "mappin.and.ellipse")
                  .foregroundColor(Color(.systemGray2))
    
              Text("\(SearchResults![index].name)")
           }
          }
         }
        }
       }
      }
     
    func AutocompleteAPI() -> Void {
        
        let parameters:Parameters = [:]
        
        APIClient.Autocomplete(query : searchText, completion:{(result) in
            switch(result){
            
            case .success(let Details):
                
                print(Details)
                
                if (Details.meta.statusCode == 200) {
                    
                    print("Successful")
                    SearchResults = Details.data
                }
                else{
                    
                    print("Fail")
                }
                
            case .failure(let error):
                print("ERROR",error)
            }
        })
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2010-09-19
      相关资源
      最近更新 更多