SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 30 day free trial to unlock unlimited reading.
Mystery Meat 2.0 – Making hidden mobile interactions accessible
Mystery Meat was the unsavory term for hiding menus behind a parent link. Learn about today’s mobile version and how to make it accessible.
Accessible version: http://www.last-child.com/mystery-meat-2-accessible/
Mystery Meat was the unsavory term for hiding menus behind a parent link. Learn about today’s mobile version and how to make it accessible.
Accessible version: http://www.last-child.com/mystery-meat-2-accessible/
5.
Developers
• onLongClick
Called when a view has been clicked
and held.
• Define and Show your menu
• Not for vital interactions. This is a short
cut.
7.
3D Touch
• Peek:
Quick glance at relevant information and
actions
• Pop:
Open full content previewed in the Peek
• Quick Actions:
Custom task list from app icon
10.
Developers
• Use accessibilityHint to suggest what’s
contained within the Peek
• Don’t make peek the only way to perform an
action
• Standard components - Accessible by default
13.
editActionsForRowAtIndexPath
• Defines the actions to display in response to swiping
the specified row.
• Accessible by default
• Define:
• Target Action and Response
• Visible Text
• Background color
14.
func tableView(_ tableView: UITableView, commit edi8ngStyle: UITableViewCellEdi8ngStyle, forRowAt indexPath: IndexPath)
{
// Don't remove this func8on, even though it's empty. It's required to allow editAc8onsForRowAtIndexPath to be called.
}
func tableView(_ tableView: UITableView, editAc8onsForRowAt indexPath: IndexPath) -> [UITableViewRowAc8on]?
{
let moreRowAc8on = UITableViewRowAc8on(style: UITableViewRowAc8onStyle.default, 8tle: "More", handler:{ac8on, indexpath in
tableView.setEdi8ng(false, animated: true)
let dona8on = self.dona8ons[indexPath.row]
let cell = tableView.cellForRow(at: indexPath)!
self.shareAc8on(dona8on as! Dona8onEn8ty, cell: cell)
});
moreRowAc8on.backgroundColor = UXStyle.standardTableRowAc8onColor()
let deleteRowAc8on = UITableViewRowAc8on(style: UITableViewRowAc8onStyle.default /* Destruc8ve */, 8tle: "Delete", handler:{ac8on, indexpath in
do
{
let previousDona8onCount = self.dona8ons.count
let dona8on = self.dona8ons[indexPath.row]
DataAccessor.sharedInstance.addAuditRecord(ac8on: "Dona8on deleted", details: (dona8on as! Dona8onEn8ty).auditEntryDetails)
try self.deleteDona8on(dona8on)
self.loadDona8ons()
let newDona8onCount = self.dona8ons.count
if newDona8onCount == previousDona8onCount - 1
{
self.tableView.deleteRows(at: [indexPath], with: .automa8c)
}
else
{
self.tableView.reloadData()
}
}
catch let error
{
ErrorHandler.handleErrorWithAlert(error as NSError, viewController: self)
}
});
return [deleteRowAc8on, moreRowAc8on];
}
17.
Swipe Navigation
• Animated transition between views
• Next and Back flow with every screen
• Eliminates navigation buttons
• No buttons? Accessibility?
• Have I reached the end of the screen?
18.
Detect Accessibility ON
• UIAccessibility kit provides two methods
• UIAccessibilityIsSwitchControlRunning
• UIAccessibilityIsVoiceOverRunning
• True == Show Navigation Buttons
19.
State Change Notification
• User enables VoiceOver while on a screen
• Detect the status change
• UIAccessibilitySwitchControlStatusDidChange
Notification
• UIAccessibilityVoiceOverStatusChanged
• Refresh screen and insert navigation buttons
20.
TurboTax Helper Function
• How can we refactor code to detect any
accessibility related settings and address them
together?
• Helper function to the rescue !
• NSNotificationCenter adds observers to track any
settings that may require us to show buttons.
• This is an OR logic. Example - if voice over OR
switch control status changed, display buttons.