Creating a Search Experience

This is an example of creating a simple search experience using MapsIndoors. We will create a map with a search button which leads to another view controller that handles the search and selection. Select a Location to go back to the map and show the selected Location on the map.

We will start by creating a simple search controller that handles search and selection of MapsIndoors Locations.

Declare a protocol for our Location selection with a didSelectLocation method

protocol MySearchControllerDelegate {
    func didSelectLocation(location: MPLocation)
}

Define MySearchController. In this tutorial our search controller is a UIViewController that implements the protocols UISearchBarDelegate, UITableViewDelegate and UITableViewDataSource.

class MySearchController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {

Setup member variables for MySearchController:

  • An instance of type MPQuery

  • An array of MPLocation to hold your list of results

  • Your delegate object

  • A search bar view

  • A table view

let query = MPQuery()
var locations = [MPLocation]()
var delegate: MySearchControllerDelegate? = nil
let tableView = UITableView()
let searchBar = UISearchBar()

In viewDidLoad, wire up your view controller to the table view and search bar.

Register a class for the reusable table view cell.

Arrange the search bar and the table view in a stack view.

In MySearchController, implement the numberOfSections method, return 1.

Implement the numberOfRowsInSection method, return the length of your locations array.

Implement the textDidChange method:

Implement the searchBarCancelButtonClicked method, with dismissal of the view controller.

Implement the tableView:cellForRowAt method. Set the cell.textLabel.text to reflect the name of the location of same index.

Implement the tableView:didSelectRowAt method. In this example we call the delegate method and dismiss the view controller. Delegate method will be handled by SearchMapController.

See the sample in MySearchController.swift

Last updated

Was this helpful?