API Reference / InstantSearch iOS Widgets / Loading
Widget signature
LoadingConnector(
  searcher: SingleIndexSearcher,
  interactor: LoadingInteractor,
  controller: LoadingController
)

About this widget

Components that show a loading indicator during pending requests.

Examples

Instantiate a LoadingConnector.

1
2
3
4
5
6
7
8
9
let searcher: SingleIndexSearcher = SingleIndexSearcher(appID: "YourApplicationID",
                                                        apiKey: "YourSearchOnlyAPIKey",
                                                        indexName: "YourIndexName")
let activityIndicatorController: ActivityIndicatorController = .init(activityIndicator: UIActivityIndicatorView())
let loadingConnector: LoadingConnector = .init(searcher: searcher,
                                               controller: activityIndicatorController)

// Execute a search which will spin the loading indicator until the results arrive
searcher.search()

Parameters

searcher
type: Searcher
Required

The Searcher that handles your searches.

interactor
type: LoadingInteractor
default: .init()
Optional

The business logic that handles showing a loading indicator.

controller
type: LoadingController
default: nil
Optional

Controller that interfaces with a concrete loading view.

Low-level API

If you want to fully control the loading indicator components and connect them manually, you can use these components.

The loading indicator consists of the following components:

  • Searcher: The Searcher that handles your searches.
  • LoadingInteractor: The logic that handles showing a loading indicator
  • LoadingController: The controller that interfaces with a concrete loading indicator.
1
2
3
4
5
6
7
8
9
10
11
let searcher: SingleIndexSearcher = SingleIndexSearcher(appID: "YourApplicationID",
                                                        apiKey: "YourSearchOnlyAPIKey",
                                                        indexName: "YourIndexName")
let loadingInteractor: LoadingInteractor = .init()
let activityIndicatorController: ActivityIndicatorController = .init(activityIndicator: UIActivityIndicatorView())

loadingInteractor.connectSearcher(searcher)
loadingInteractor.connectController(activityIndicatorController)

// Execute a search which will spin the loading indicator until the results arrive
searcher.search()

Customizing your view

The default controllers, e.g., ActivityIndicatorController, work well when you want to use native UIKit with their default behavior like UIActivityIndicatorView.

If you want to use another component such as a third-party view, or want to introduce some custom behavior to the already provided UIKit components, you can create your own controller conforming to the LoadingController protocol.

Protocol

func setItem(_ item: Bool)

Function called when a new state of the loading indicator is set.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ActivityIndicatorController: LoadingController {

  let activityIndicator: UIActivityIndicatorView

  public init (activityIndicator: UIActivityIndicatorView) {
    self.activityIndicator = activityIndicator
  }

  public func setItem(_ item: Bool) {
    item ? activityIndicator.startAnimating() : activityIndicator.stopAnimating()
  }

}

Did you find this page helpful?