<!--
{
  "availability" : [
    "iOS: 7.0.0 -",
    "iPadOS: 7.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.9.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "GameController",
  "identifier" : "/documentation/GameController/GCControllerElement",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Game Controller"
    ],
    "preciseIdentifier" : "c:objc(cs)GCControllerElement"
  },
  "title" : "GCControllerElement"
}
-->

# GCControllerElement

An input for a physical control, such as a button or thumbstick.

```
class GCControllerElement
```

## Overview

`GCControllerElement` is an abstract superclass for specific types of elements that represent controls on a game controller. Use the respective subclasses to either get the input of an element directly or set a handler that the element calls when the user changes a value. This class provides support for common features.

For complex elements that have subelements, you can get the containing element using the [`collection`](/documentation/GameController/GCControllerElement/collection) property. For example, a direction pad ([`GCControllerDirectionPad`](/documentation/GameController/GCControllerDirectionPad)) has two axis control and four button subelements.

If the user binds a controller element to a system gesture, the system sends the input to the system gesture recognizer first. If it doesn’t recognize a gesture, the system sends the input to your app but with a delay. If it does recognize a gesture, it doesn’t send any input to your app.

To change this default behavior, you can set the [`preferredSystemGestureState`](/documentation/GameController/GCControllerElement/preferredSystemGestureState) property to [`GCControllerElement.SystemGestureState.alwaysReceive`](/documentation/GameController/GCControllerElement/SystemGestureState/alwaysReceive) to receive the input simultaneously without delay. Alternatively, set it to [`GCControllerElement.SystemGestureState.disabled`](/documentation/GameController/GCControllerElement/SystemGestureState/disabled) to disable the system gesture and receive the input exclusively. Use the [`isBoundToSystemGesture`](/documentation/GameController/GCControllerElement/isBoundToSystemGesture) property to check whether the user included an element in a system gesture.

Use the [`isAnalog`](/documentation/GameController/GCControllerElement/isAnalog) property to determine whether an element’s input value is a range of values or a discrete digital value.

## Topics

### Accessing input values

[`analog`](/documentation/GameController/GCControllerElement/isAnalog)

A Boolean value that indicates whether the element provides analog data.

### Getting a localized name

[`localizedName`](/documentation/GameController/GCControllerElement/localizedName)

The localized name for the element or the remapped element.

[`unmappedLocalizedName`](/documentation/GameController/GCControllerElement/unmappedLocalizedName)

The element’s localized name, not the remapped name.

### Displaying a symbol

[`sfSymbolsName`](/documentation/GameController/GCControllerElement/sfSymbolsName)

A system symbol for the element or the remapped element.

[`unmappedSfSymbolsName`](/documentation/GameController/GCControllerElement/unmappedSfSymbolsName)

The element’s system symbol, not the remapped symbol.

### Accessing elements by key

[`aliases`](/documentation/GameController/GCControllerElement/aliases)

The element’s aliases you use when accessing it with the subscript notation.

### Getting the containing element

[`collection`](/documentation/GameController/GCControllerElement/collection)

The enclosing element for this element.

### Handling system gesture input

[`boundToSystemGesture`](/documentation/GameController/GCControllerElement/isBoundToSystemGesture)

A Boolean value that indicates whether the user binds the element to a system gesture.

[`preferredSystemGestureState`](/documentation/GameController/GCControllerElement/preferredSystemGestureState)

The preferred state for handling input when the user binds the element to a system gesture.

[`SystemGestureState`](/documentation/GameController/GCControllerElement/SystemGestureState)

A state for handling input when an element is part of a system gesture.

## Relationships

### Conforms To

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`Hashable`](/documentation/Swift/Hashable)

[`CVarArg`](/documentation/Swift/CVarArg)

[`Equatable`](/documentation/Swift/Equatable)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

### Inherited By

[`GCControllerTouchpad`](/documentation/GameController/GCControllerTouchpad)

[`GCControllerButtonInput`](/documentation/GameController/GCControllerButtonInput)

[`GCControllerAxisInput`](/documentation/GameController/GCControllerAxisInput)

[`GCControllerDirectionPad`](/documentation/GameController/GCControllerDirectionPad)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

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)