<!--
{
  "availability" : [
    "iOS: 14.0.0 -",
    "iPadOS: 14.0.0 -",
    "macCatalyst: 14.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CarPlay",
  "identifier" : "/documentation/CarPlay/CPPointOfInterestTemplate",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "CarPlay"
    ],
    "preciseIdentifier" : "c:objc(cs)CPPointOfInterestTemplate"
  },
  "title" : "CPPointOfInterestTemplate"
}
-->

# CPPointOfInterestTemplate

A template that displays a map with selectable points of interest.

```
@MainActor class CPPointOfInterestTemplate
```

## Overview

The Point of Interest template displays selectable instances of [`CPPointOfInterest`](/documentation/CarPlay/CPPointOfInterest) as annotations on the template’s map, and as items in a scrollable picker that the template overlays on the map. When the user selects a point of interest, the template displays a detail card that contains secondary information and optional actions the user can perform. The template manages clustering points of interest, selecting a point of interest, and zooming and panning the map.

To create a Point of Interest template, you call the [`init(title:pointsOfInterest:selectedIndex:)`](/documentation/CarPlay/CPPointOfInterestTemplate/init(title:pointsOfInterest:selectedIndex:)) method and provide an array of  `CPPointOfInterest` objects to display in the template’s map. Then call your interface controller’s [`pushTemplate(_:animated:completion:)`](/documentation/CarPlay/CPInterfaceController/pushTemplate(_:animated:completion:)) method to push it onto the navigation hierarchy, or add the template as a tab in your [`CPTabBarTemplate`](/documentation/CarPlay/CPTabBarTemplate).

You must create an object that implements the [`CPPointOfInterestTemplateDelegate`](/documentation/CarPlay/CPPointOfInterestTemplateDelegate) protocol and set it as the template’s delegate using the [`pointOfInterestDelegate`](/documentation/CarPlay/CPPointOfInterestTemplate/pointOfInterestDelegate) property. The template informs its delegate about changes to the map’s visible region so you can update the points of interest the map displays.

## Topics

### Creating a Point of Interest Template

[`init(title:pointsOfInterest:selectedIndex:)`](/documentation/CarPlay/CPPointOfInterestTemplate/init(title:pointsOfInterest:selectedIndex:))

Creates a Point of Interest template with a title, the points of interest to display, and the initial selection’s index.

[`CPPointOfInterest`](/documentation/CarPlay/CPPointOfInterest)

An object that describes a point of interest on the template’s map and in its scrollable picker.

### Handling Template Events

[`pointOfInterestDelegate`](/documentation/CarPlay/CPPointOfInterestTemplate/pointOfInterestDelegate)

The object that serves as the template’s delegate.

[`CPPointOfInterestTemplateDelegate`](/documentation/CarPlay/CPPointOfInterestTemplateDelegate)

The methods to handle a Point of Interest template’s events.

### Managing the Picker’s Title

[`title`](/documentation/CarPlay/CPPointOfInterestTemplate/title)

The scrollable picker’s title.

### Managing the Points of Interest

[`pointsOfInterest`](/documentation/CarPlay/CPPointOfInterestTemplate/pointsOfInterest)

The points of interest the template displays on the map and in the scrollable picker.

[`setPointsOfInterest(_:selectedIndex:)`](/documentation/CarPlay/CPPointOfInterestTemplate/setPointsOfInterest(_:selectedIndex:))

Updates the points of interest and the current selection.

[`selectedIndex`](/documentation/CarPlay/CPPointOfInterestTemplate/selectedIndex)

The current selection’s index.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)