blob: 77e5e7af8f4f872d74a756023b6c3095a655c5fb [file] [log] [blame] [view]
### Card Accessibility
To help ensure your cards are accessible to as many users as possible, please be sure to review the following
recommendations:
#### Accessibility for Cards in a Collection
Since assistive technologies visit all cards in a collection in a sequential order, it is often
easier to distinguish between elements that belong to different cards by aggregating all the
card's information so the card is read as a single sentence.
This can be done by setting an appropriate
[`accessibilityLabel`](https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel)
for the card. Additionally, set the card's
[`isAccessibilityElement`](https://developer.apple.com/documentation/objectivec/nsobject/1615141-isaccessibilityelement)
to true. Cards are a container element and setting isAccessibiltyElement for a container
turns off individually selecting its subelements.
Swift
```swift
card.isAccessibilityElement = true
card.accessibilityLabel = "Location \(userLocation.name) is popular with users " +
"who enjoy \(userLocation.popularActivityMatchingUserProfile(userProfile))"
```
Objective-C
```objc
card.isAccessibilityElement = YES;
card.accessibilityLabel = [NSString
stringWithFormat:@"Location %@ is popular with users who enjoy %@",
userLocation.name,
userLocation.popularActivityMatchingUserProfile(userProfile)];
```
#### Accessibility for Single Cards
Nested elements in MDCCards are available to assistive technologies without additional
customization, however additional setup may be needed to accommodate special scenarios,
such as:
#### Accessibility for Single Cards: Images
Images that have additional context beyond text that is already presented on the card.
For example, news article images can benefit from an
[`accessibilityLabel`](https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel)
describing their content.
Swift
```swift
articleImageView.isAccessibilityElement = true
articleImageView.accessibilityLabel = "Event or scene description"
```
Objective-C
```objc
articleImageView.isAccessibilityElement = YES;
articleImageView.accessibilityLabel = @"Event or scene description";
```
#### Accessibility for Single Cards: Star Rating
Star or rating images should have an
[`accessibilityLabel`](https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel)
describing its purpuse and an
[`accessibilityValue`](https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619583-accessibilityvalue)
describing the rating value.
Swift
```swift
ratingView.isAccessibilityElement = true
ratingView.accessibilityLabel = "Average customer rating, out of " +
"\(MDCProductRating.maximumValue) stars"
ratingView.accessibilityValue = (String)product.averageRating
```
Objective-C
```objc
ratingView.isAccessibilityElement = YES;
ratingView.accessibilityLabel = [NSString stringWithFormat:@"Average customer" +
" rating, out of %d stars", MDCProductRating.maximumValue];
ratingView.accessibilityValue = @(product.averageRating).stringValue;
```
#### Accessibility for Single Cards: Reordering elements
Primary content or actions that appear lower on the screen will be read last by assistive
technologies, sometimes after longer or non-primary content. To change the order, or group
elements together, you can make the card an accessibility container by adopting the
[`UIAccessibilityContainer`](https://developer.apple.com/documentation/uikit/accessibility/uiaccessibilitycontainer)
protocol. Grouping and order is controlled by creating as many
[`UIAccessibilityElement`](https://developer.apple.com/documentation/uikit/uiaccessibilityelement)
elements as needed, and returning them in the desired order.