Search UI SDK and Maps SDK integration
This example uses the Mapbox Maps SDK v10.2.0 and Search SDK v1.0.0-beta.21 for iOS Add the Maps SDK as a dependency using the Maps SDK installation instructions.
import UIKitimport MapboxMapsimport MapboxSearchUI class SimpleUISearchViewController: MapsViewController { lazy var searchController: MapboxSearchController = {let locationProvider = PointLocationProvider(coordinate: .sanFrancisco)var configuration = Configuration(locationProvider: locationProvider) return MapboxSearchController(configuration: configuration)}() lazy var panelController = MapboxPanelController(rootViewController: searchController) override func viewDidLoad() {super.viewDidLoad() let cameraOptions = CameraOptions(center: .sanFrancisco, zoom: 15)mapView.camera.fly(to: cameraOptions, duration: 1, completion: nil) searchController.delegate = selfaddChild(panelController)}} extension SimpleUISearchViewController: SearchControllerDelegate {func categorySearchResultsReceived(category: SearchCategory, results: [SearchResult]) {showAnnotations(results: results)} func searchResultSelected(_ searchResult: SearchResult) {showAnnotation(searchResult)} func userFavoriteSelected(_ userFavorite: FavoriteRecord) {showAnnotation(userFavorite)}}
import UIKitimport MapboxMapsimport MapboxSearchimport MapboxSearchUI class MapsSearchViewController: UIViewController {var searchController = MapboxSearchController()var mapView: MapView?var annotationManager: PointAnnotationManager? override func viewDidLoad() {super.viewDidLoad() // Search setupsearchController.delegate = selflet panelController = MapboxPanelController(rootViewController: searchController)addChild(panelController) // Map setuplet mapView = MapView(frame: view.bounds)mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]self.mapView = mapViewview.addSubview(mapView) annotationManager = mapView.annotations.makePointAnnotationManager()} func showResults(_ results: [SearchResult]) {let annotations = results.map { searchResult -> PointAnnotation invar annotation = PointAnnotation(coordinate: searchResult.coordinate)annotation.textField = searchResult.nameannotation.textOffset = [0, -2]annotation.textColor = ColorRepresentable(color: .red)annotation.image = .defaultreturn annotation} annotationManager?.syncAnnotations(annotations)if case let .point(point) = annotations.first?.feature.geometry {let options = CameraOptions(center: point.coordinates)mapView?.mapboxMap.setCamera(to: options)}}} extension MapsSearchViewController: SearchControllerDelegate {func categorySearchResultsReceived(results: [SearchResult]) {showResults(results)} func searchResultSelected(_ searchResult: SearchResult) {showResults([searchResult])} func userFavoriteSelected(_ userFavorite: FavoriteRecord) {showResults([userFavorite])}}