Skip to main content

Events

ElementEvent

iOS Element events are triggered whenever a user types into an element text field. An ElementEvent is the struct that gets passed into the subject's receiveValue function. The following are properties on the ElementEvent struct:

PropertyDescription
typeThe event type for the ElementEvent.
completeWhether the input valid and maskSatisfied properties are true.
validWhether the input is valid according to validation for each element.
maskSatisfiedWhether the input satisfies the mask length requirements.
detailsAn array of ElementEventDetail describing more information about the element event.
binInfoBinInfo object containing card BIN details when binLookup is enabled on CardNumberUITextField.
selectedNetworkThe selected payment network for co-badged cards (e.g., "cartes-bancaires", "visa"). Only present when co-badge support is enabled.

ElementEvent Types

The following are the available element event types and their descriptions.

TypeDescription
textChangeAll elements emit this event when a user changes an element's value.
focusAll elements emit this event on textFieldDidBeginEditing.
blurAll elements emit this event on textFieldDidEndEditing.
maskChangeCardVerificationCodeUITextField elements emit this event when its mask has changed.

ElementEventDetail

PropertyDescription
typeA String describing the type of detail.
messageA String containing the message for the detail.

ElementEventDetail Types

The following are the available element event detail types and their descriptions.

TypeDescription
cardBrandCardNumberUITextField elements emit a card brand name when a card number can be identified.
cardLast4CardNumberUITextField elements emit the last 4 digits of a card number when the input is considered complete.
cardBinCardNumberUITextField elements emit the first 6 or 8 digits of a card number when the input is considered complete. It is 6 digits for card numbers less than 16 digits long and 8 otherwise.

Usage

You can observe element events through the PassThroughSubject subject field on every element.

private var cancellables = Set<AnyCancellable>()
...

myTextField.subject.sink { completion in
...
} receiveValue: { elementEvent in
...
}.store(in: &cancellables)

Using Metadata for Event Values

Instead of subscribing to events, the same properties can be accessed at any time from the metadata property on all elements.

Additionally, the card related event details can be accessed from the cardMetadata property only on CardNumberUITextField.

The following are the available properties accessible from metadata.

PropertyTypeDescription
completeBoolWhether the input valid and maskSatisfied properties are true.
validBoolWhether the input is valid according to validation for each element.
maskSatisfiedBoolWhether the input satisfies the mask length requirements.

The following are the available properties accessible from cardMetadata.

PropertyTypeDescription
cardBrandStringCard brand name when a card number can be identified.
cardLast4StringLast 4 digits of a card number when the input is considered complete.
cardBinStringFirst 6 or 8 digits of a card number when the input is considered complete. It is 6 digits for card numbers less than 16 digits long and 8 otherwise.

BinInfo

When binLookup is enabled on a CardNumberUITextField, the element will automatically perform a BIN lookup and include the results in the binInfo property of the ElementEvent. This provides detailed information about the card based on its BIN (Bank Identification Number).

BinInfo Properties

PropertyTypeDescription
brandString?The card brand (e.g., "visa", "mastercard")
fundingString?The funding type (e.g., "credit", "debit", "prepaid")
issuerString?The name of the issuing bank
segmentString?The card segment type
additional[CardInfo]?Array of additional card information for co-badged cards

CardInfo Properties

PropertyTypeDescription
brandString?Additional card brand for co-badged cards
fundingString?Funding type for the additional brand
issuerString?Issuer for the additional brand

Enabling BIN Lookup

To enable BIN lookup on a CardNumberUITextField:

let cardNumberTextField = CardNumberUITextField()
cardNumberTextField.binLookup = true

Usage Example

cardNumberTextField.subject.sink { completion in
} receiveValue: { event in
if let binInfo = event.binInfo {
print("Card brand: \(binInfo.brand ?? "unknown")")
print("Funding type: \(binInfo.funding ?? "unknown")")
print("Issuer: \(binInfo.issuer ?? "unknown")")

// Check for co-badged cards
if let additional = binInfo.additional, !additional.isEmpty {
print("Co-badged card detected")
additional.forEach { cardInfo in
print("Additional brand: \(cardInfo.brand ?? "unknown")")
}
}
}
}.store(in: &cancellables)