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.swiftarrow-up-right

Last updated

Was this helpful?