SlideShare a Scribd company logo
Implementing
Inclusive
Interfaces
Sally Shepard // @mostgood
Implementing
Inclusive
Interfaces
accessible |əkˈsɛsɪb(ə)l|
adjective
able to be reached, entered, or used
by people who have a disability.
disability?
inclusive |ɪnˈkluːsɪv|
adjective
not excluding any section of society
or any party involved in something.
Implementing
Inclusive
Interfaces
interface |ˈɪntəәfeɪs|
noun
a device or program enabling a user
to communicate with a computer.
interface != GUI
Vision
VoiceOver
Zoom
Invert Colors
Greyscale
Larger Text
Bold Text
Button Shapes
Reduce Transparency
Increase Contrast
Reduce Motion
On/Off Labels
VoiceOver replicates
the GUI by speaking it.
VoiceOver speaks more
than 30 languages
Available on
iOS, OS X, Apple TV
& Apple Watch
To extend VoiceOver,
users can also use braille.
Braille displays
Braille displays
Braille Keyboards
That’s amazing!
Demo: Using VoiceOver
Physical /
Motor skills
Assistive Touch
New in iOS 9!
Touch Accommodation
Hold Duration
Tap Assistance
Switch Control
Implementing Inclusive Interfaces
Demo: Switch Control
Learning
Difficulties
Guided Access
How does Guided
Access work?
Hearing
Hearing Aids
LED Flash
Mono Audio
Noise Cancellation
Audio Balance
Subtitles & Captioning
Implementing
Inclusive
Interfaces
Accessibility APIs
Classes:
UIAccessibilityElement
UIAccessibilityCustomAction
Informal Protocols:
UIAccessibility
UIAccessibilityAction
UIAccessibilityContainer
UIAccessibilityFocus
Protocols:
UIAccessibilityReadingContent
UIAccessibilityIdentification
Basics of the
Accessibility APIs
isAccessibilityElement
sendButton.isAccessibliltyElement = YES;
VoiceOver: Describe the element
Label: Invert Colours - Off
Hint: Double-tap to toggle setting
Label: Vision
Trait: Heading
accessibilityLabel
- Label that identifies the accessibility element
- UIKit control: uses title
- Image-based controls definitely need to
specify this!
- Don’t include the control type
accessibilityTraits
- Combination of traits that best characterise
the accessibility element
- UIKit controls: defaults to standard traits
- Combine traits with an OR operator
- (UIAccessibilityTraits)accessibilityTraits
{
return [super accessibilityTraits] | UIAccessibilityTraitButton;
}
UIAccessibilityTraitNone;
UIAccessibilityTraitButton;
UIAccessibilityTraitLink;
UIAccessibilityTraitSearchField;
UIAccessibilityTraitImage;
UIAccessibilityTraitSelected;
UIAccessibilityTraitPlaysSound;
UIAccessibilityTraitKeyboardKey;
UIAccessibilityTraitStaticText;
UIAccessibilityTraitSummaryElement;
UIAccessibilityTraitNotEnabled;
UIAccessibilityTraitUpdatesFrequently;
UIAccessibilityTraitStartsMediaSession;
UIAccessibilityTraitAdjustable;
UIAccessibilityTraitAllowsDirectInteraction;
UIAccessibilityTraitCausesPageTurn;
UIAccessibilityTraitHeader;
accessibilityHint
- Describes the outcome of performing an action
- Don’t make it sound like a command
- Start with verb describing result
- Keep it brief
Note: can be disabled by user
“Sends the message”
- Enable accessibility
- Fill out Label and Hint
- Add traits
Testing
Simulator - Accessibility Inspector
Testing VoiceOver
on a device
Siri - turn VoiceOver on
Screen curtain
Three-finger triple-tap on the screen
Accessibility shortcut
Triple-tap the home button
Testing Switch Control
on a device
Inclusive User Experience
Make it functional.
Step 1:
Make a list of essential
user stories / features.
Step 2:
Test each feature,
recording the results as
you go.
Step 3:
Fix it until it’s functional.
Case study:
Gift Finder by
notonthehighstreet.com
A user can view all details about a product.
A user can purchase a product or products through the checkout.
A user can browse through the products by pre-defined categories.
A user can find a product by searching.
A user can select a product from a list of chosen picks.
A user can sort a list of products by relevance, price or date added.
A user can filter a list of products by price range and various criteria.
A user can view a list of products as a list or a grid.
A user can add a product to a list of favourites.
A user can add a product to the basket.
A user can customise a product by personalizing it.
A user can view all details about a product.
A user can view all
details about a
product.
A user can view all
details about a
product.
A user can view all
details about a
product.
A user can view all
details about a
product.
Implementing Inclusive Interfaces
Implementing Inclusive Interfaces
Testing results:
Highlight what’s read
out.
Testing results:
Highlight what’s read
out.
Testing results:
Highlight what’s read
out.
Testing results:
Highlight what’s read
out.
Testing results:
Block out anything
not enabled.
Testing results:
Block out anything
not enabled.
Testing results:
Block out anything
not enabled.
Testing results:
Block out anything
not enabled.
Add your testing results
to source control.
Fix any elements that
are not working.
- (void)viewDidLoad {
...
[self.closeButton setTitle:NSLocalizedString(@“close button title", nil)
forState:UIControlStateNormal];
self.closeButton.accessibilityTraits = UIAccessibilityTraitButton;
self.imageScrollView.isAccessibilityElement = YES;
self.addToFavouritesButton.isAccessibilityElement = YES;
[self.addToFavouritesButton setTitle:NSLocalizedString(@“add to favourites button
title", nil) forState:UIControlStateNormal];
self.addToFavouritesButton.accessibilityTraits = UIAccessibilityTraitButton;
self.addToCartButton.isAccessibilityElement = YES;
[self.addToCartButton setTitle:NSLocalizedString(@“add to cart button title", nil)
forState:UIControlStateNormal];
self.addToCartButton.accessibilityTraits = UIAccessibilityTraitButton;
...
}
In the “product detail class”
Fix it until it’s functional.
Adding polish
- (void)viewDidLoad {
...
self.isAccessibilityElement = YES;
self.accessibilityLabel = [NSString stringWithFormat:@"%@, %@", self.titleLabel.text,
self.priceLabel.text];
self.titleLabel.isAccessibilityElement = NO;
self.priceLabel.isAccessibilityElement = NO;
...
}
Group elements - In the “product cell class”
Find out if user has
VoiceOver on
BOOL isVoiceOverOn =
UIAccessiblityIsVoiceOverRunning():
Moving VoiceOver focus
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
self.goButton);
Direct Interaction
- (UIAccessibilityTraits)accessibilityTraits
{
return UIAccessibilityTraitAllowsDirectInteraction;
}
Localization and
VoiceOver
- (NSString *)accessibilityLabel {
return NSLocalizedString(@"titleLabelText", nil);
}
titleLabel.accessibilityLabel =
NSLocalizedString(@"titleLabelText", nil);
//OR
Accessibility notifications
UIAccessibilityPostNotification(NAME, PARAMETER);
(UIAccessibilityPageScrolledNotification, @”Top of list”)
(UIAccessibilityAnnouncementNotification, @”New message”)
(UIAccessbilityLayoutChangedNotification, NSString or UIView)
etc...
Find out when VoiceOver is
finished speaking
Listen out for: UIAccessibilityAnnouncementDidFinishNotification
To find out if VoiceOver had finished reading or was interrupted, check
the userInfo:
UIAccessibilityAnnouncementKeyStringValue
UIAccessibilityAnnouncementKeyWasSuccessful
Magic Tap
Two-finger double-tap
- (BOOL)accessibilityPerformMagicTap
{
[self doAwesomeThing];
return YES;
}
Getting back
two-finger, scrub back and forth
- (BOOL)accessibilityPerformEscape
{
// Dismiss your view

return YES;
}
Modal presentation
@property(nonatomic) BOOL accessibilityViewIsModal
Reduce transparency
UIAccessibilityIsReduceTransparencyEnabled()
Reduce motion
UIAccessibilityIsReduceMotionEnabled()
Custom Actions
UIAccessibilityCustomAction
UIAccessibilityCustomAction *favouriteAction = [[UIAccessibilityCustomAction
alloc] initWithName:@“Add to favourites" target:self
selector:@selector(addToFavourites)];
UIAccessibilityCustomAction *addToBasketAction = [[UIAccessibilityCustomAction
alloc] initWithName:@“Add to basket" target:self
selector:@selector(addToBasket)];
for (UIView *element in cardView.accessibilityElements) {
element.accessibilityCustomActions = @[helloAction, goodbyeAction];
}
Web Content
https://developer.apple.com/videos/
wwdc/2014/?include=516#516
ARIA Support
Closed Captions for HTML5
Video
HTML5 Timed Text Tracks
HTML5 Media Synchronization
Captions for video
High DPI for image-set
Page visibility events
Web Speech API
Adding support for
Switch Control
UIAccessibilityNotificationSwitchControlIdentifier
New in iOS 8:
Pause and Resume
SwitchControl:
UIAccessibilityPauseAssistiveTechnologyNotification
UIAccessibilityResumeAssistiveTechnologyNotification
Adding Guided
Access support
UIGuidedAccessRestrictionDelegate
Homework!
Spend a whole day
with VoiceOver or
Switch Control
#1
Don’t make
assumptions.
#2
Where should you start?
Make it functional!
#3
Iterate & polish
#4
Make it a requirement
not a feature.
#5
Resources
Testing Accessibility on iOS:
developer.apple.com/library/ios/technotes/TestingAccessibilityOfiOSApps
Sample code for non-UIKit:
developer.apple.com/library/ios/samplecode/sc2216
Accessibility programming guide for iOS:
developer.apple.com/library/ios/documentation/UserExperience/
Conceptual/iPhoneAccessibility
WatchOS Accessibility WWDC session:
https://developer.apple.com/videos/wwdc/2015/?id=204
Impairment Simulator Software:
www.inclusivedesigntoolkit.com
Thank you!
Sally Shepard // @mostgood

More Related Content

Similar to Implementing Inclusive Interfaces (20)

PPTX
Learnings for Accessibility for iOS Platform
Tasneem Sayeed
 
PDF
Assignment2 B Walkthrough
Mahmoud
 
PDF
Session 210 _accessibility_for_ios
cheinyeanlim
 
PPTX
Basic iOS Training with SWIFT - Part 3
Manoj Ellappan
 
PPTX
The Good, The Bad, The Voiceover - ios Accessibility
Aimee Maree
 
PDF
Intro to ios - init by SLOHacks
Randy Scovil
 
PDF
Many Devices, One Standard: Mobile Accessibility with WCAG 2.1
Interactive Accessibility
 
PDF
Advanced iOS
Pete Goodliffe
 
PDF
Andrey Khlopotin accessibility iOS
Wey Wey Web
 
PDF
Beyond the touch screen - better accessibility for mobile apps
cxpartners
 
PPTX
Native Mobile Testing for Newbies
Susan Hewitt
 
PDF
iOS 7 Accessibility
Ted Drake
 
PDF
iOS 101 - Xcode, Objective-C, iOS APIs
Subhransu Behera
 
PPTX
Code camp 2011 Getting Started with IOS, Una Daly
Una Daly
 
PPTX
About Mobile Accessibility
Johnny Sung
 
PPTX
IOS Swift language 1st Tutorial
Hassan A-j
 
PDF
iOS Accessibility
Luis Abreu
 
PPTX
04 objective-c session 4
Amr Elghadban (AmrAngry)
 
PDF
Mobile Human interface giude
Pragati Singh
 
KEY
Automated ui testing
DavidReidy
 
Learnings for Accessibility for iOS Platform
Tasneem Sayeed
 
Assignment2 B Walkthrough
Mahmoud
 
Session 210 _accessibility_for_ios
cheinyeanlim
 
Basic iOS Training with SWIFT - Part 3
Manoj Ellappan
 
The Good, The Bad, The Voiceover - ios Accessibility
Aimee Maree
 
Intro to ios - init by SLOHacks
Randy Scovil
 
Many Devices, One Standard: Mobile Accessibility with WCAG 2.1
Interactive Accessibility
 
Advanced iOS
Pete Goodliffe
 
Andrey Khlopotin accessibility iOS
Wey Wey Web
 
Beyond the touch screen - better accessibility for mobile apps
cxpartners
 
Native Mobile Testing for Newbies
Susan Hewitt
 
iOS 7 Accessibility
Ted Drake
 
iOS 101 - Xcode, Objective-C, iOS APIs
Subhransu Behera
 
Code camp 2011 Getting Started with IOS, Una Daly
Una Daly
 
About Mobile Accessibility
Johnny Sung
 
IOS Swift language 1st Tutorial
Hassan A-j
 
iOS Accessibility
Luis Abreu
 
04 objective-c session 4
Amr Elghadban (AmrAngry)
 
Mobile Human interface giude
Pragati Singh
 
Automated ui testing
DavidReidy
 

More from Sally Shepard (18)

PDF
Swift on Raspberry Pi
Sally Shepard
 
PDF
Swift hardware hacking @ try! Swift
Sally Shepard
 
PDF
Porting iOS apps to tvOS
Sally Shepard
 
PDF
Porting iOS apps to tvOS
Sally Shepard
 
PDF
Helping Users Create Good Habits @ AltConf 2017
Sally Shepard
 
PDF
iOS Accessibility Testing Workshop
Sally Shepard
 
PDF
Helping Users Create Good Habits @ MCE 2017
Sally Shepard
 
PDF
Debugging Accessibility @ Craft Conf
Sally Shepard
 
PDF
Accessibility
Sally Shepard
 
PDF
Debugging Accessibility
Sally Shepard
 
PDF
Crafting Great Accessible Experiences
Sally Shepard
 
PDF
Developing for Apple TV
Sally Shepard
 
PDF
Building habits: keeping users engaged
Sally Shepard
 
PDF
Extracurricular Swift
Sally Shepard
 
PDF
Inheriting iOS code
Sally Shepard
 
PDF
Making an app like 'Clear' Accessible
Sally Shepard
 
PDF
Making apps for the Apple TV
Sally Shepard
 
PDF
Beyond VoiceOver: making iOS apps accessible
Sally Shepard
 
Swift on Raspberry Pi
Sally Shepard
 
Swift hardware hacking @ try! Swift
Sally Shepard
 
Porting iOS apps to tvOS
Sally Shepard
 
Porting iOS apps to tvOS
Sally Shepard
 
Helping Users Create Good Habits @ AltConf 2017
Sally Shepard
 
iOS Accessibility Testing Workshop
Sally Shepard
 
Helping Users Create Good Habits @ MCE 2017
Sally Shepard
 
Debugging Accessibility @ Craft Conf
Sally Shepard
 
Accessibility
Sally Shepard
 
Debugging Accessibility
Sally Shepard
 
Crafting Great Accessible Experiences
Sally Shepard
 
Developing for Apple TV
Sally Shepard
 
Building habits: keeping users engaged
Sally Shepard
 
Extracurricular Swift
Sally Shepard
 
Inheriting iOS code
Sally Shepard
 
Making an app like 'Clear' Accessible
Sally Shepard
 
Making apps for the Apple TV
Sally Shepard
 
Beyond VoiceOver: making iOS apps accessible
Sally Shepard
 
Ad

Recently uploaded (20)

PPTX
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PPTX
UI5con_2025_Accessibility_Ever_Evolving_
gerganakremenska1
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PPTX
Library_Management_System_PPT111111.pptx
nmtnissancrm
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
PPTX
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PDF
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
PDF
AI Prompts Cheat Code prompt engineering
Avijit Kumar Roy
 
PDF
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
PPTX
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
Simplify React app login with asgardeo-sdk
vaibhav289687
 
PDF
NPD Software -Omnex systems
omnex systems
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
iaas vs paas vs saas :choosing your cloud strategy
CloudlayaTechnology
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
UI5con_2025_Accessibility_Ever_Evolving_
gerganakremenska1
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Library_Management_System_PPT111111.pptx
nmtnissancrm
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
Get Started with Maestro: Agent, Robot, and Human in Action – Session 5 of 5
klpathrudu
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Dipole Tech Innovations – Global IT Solutions for Business Growth
dipoletechi3
 
AI Prompts Cheat Code prompt engineering
Avijit Kumar Roy
 
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
prodad heroglyph crack 2.0.214.2 Full Free Download
cracked shares
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Simplify React app login with asgardeo-sdk
vaibhav289687
 
NPD Software -Omnex systems
omnex systems
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
Ad

Implementing Inclusive Interfaces