accessibility columns

This commit is contained in:
Pfeil, Scott Robert 2020-06-12 16:22:12 -04:00
parent 843616f755
commit cdbdb90771
10 changed files with 65 additions and 48 deletions

View File

@ -58,10 +58,8 @@ import Foundation
addMolecule(stack) addMolecule(stack)
stack.restack() stack.restack()
verticalStack.restack() verticalStack.restack()
isAccessibilityElement = true
accessibilityTraits = button.accessibilityTraits accessibilityTraits = button.accessibilityTraits
accessibilityHint = button.accessibilityHint accessibilityHint = button.accessibilityHint
updateAccessibilityLabel()
} }
//-------------------------------------------------- //--------------------------------------------------
@ -100,10 +98,8 @@ import Foundation
// MARK: - Accessibility // MARK: - Accessibility
//-------------------------------------------------- //--------------------------------------------------
func updateAccessibilityLabel() { func getAccessibilityMessage() -> String? {
var message = "" var message = ""
if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty { if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty {
message += eyebrowText + ", " message += eyebrowText + ", "
} }
@ -123,8 +119,27 @@ import Foundation
if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty { if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty {
message += rightImageViewText message += rightImageViewText
} }
return message.count > 0 ? message : nil
accessibilityLabel = message }
func updateAccessibilityLabel() {
accessibilityTraits = .button
if let accessoryView = accessoryView {
// Both caret and button. Read all content on caret.
isAccessibilityElement = false
accessoryView.accessibilityLabel = getAccessibilityMessage()
accessibilityElements = [accessoryView, button]
} else {
// Make whole cell focusable if no action.
isAccessibilityElement = true
accessibilityElements = nil
if let message = getAccessibilityMessage(),
let buttonTitle = button.titleLabel?.text {
accessibilityLabel = message + ", " + buttonTitle
} else {
accessibilityLabel = getAccessibilityMessage()
}
}
} }
open override func accessibilityActivate() -> Bool { open override func accessibilityActivate() -> Bool {

View File

@ -58,10 +58,8 @@ import Foundation
addMolecule(stack) addMolecule(stack)
stack.restack() stack.restack()
verticalStack.restack() verticalStack.restack()
isAccessibilityElement = true
accessibilityTraits = button.accessibilityTraits accessibilityTraits = button.accessibilityTraits
accessibilityHint = button.accessibilityHint accessibilityHint = button.accessibilityHint
updateAccessibilityLabel()
} }
//-------------------------------------------------- //--------------------------------------------------
@ -100,10 +98,8 @@ import Foundation
// MARK: - Accessibility // MARK: - Accessibility
//-------------------------------------------------- //--------------------------------------------------
func updateAccessibilityLabel() { func getAccessibilityMessage() -> String? {
var message = "" var message = ""
if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty { if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty {
message += eyebrowText + ", " message += eyebrowText + ", "
} }
@ -123,8 +119,27 @@ import Foundation
if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty { if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty {
message += rightImageViewText message += rightImageViewText
} }
return message.count > 0 ? message : nil
accessibilityLabel = message }
func updateAccessibilityLabel() {
accessibilityTraits = .button
if let accessoryView = accessoryView {
// Both caret and button. Read all content on caret.
isAccessibilityElement = false
accessoryView.accessibilityLabel = getAccessibilityMessage()
accessibilityElements = [accessoryView, button]
} else {
// Make whole cell focusable if no action.
isAccessibilityElement = true
accessibilityElements = nil
if let message = getAccessibilityMessage(),
let buttonTitle = button.titleLabel?.text {
accessibilityLabel = message + ", " + buttonTitle
} else {
accessibilityLabel = getAccessibilityMessage()
}
}
} }
open override func accessibilityActivate() -> Bool { open override func accessibilityActivate() -> Bool {

View File

@ -54,8 +54,6 @@ import Foundation
arrow.pinHeightAndWidth() arrow.pinHeightAndWidth()
arrowAndLabel2Stack.restack() arrowAndLabel2Stack.restack()
stack.restack() stack.restack()
isAccessibilityElement = true
updateAccessibilityLabel()
} }
//----------------------------------------------------- //-----------------------------------------------------
@ -92,7 +90,7 @@ import Foundation
//----------------------------------------------------- //-----------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let label1Text = label1.text, !label1Text.isEmpty { if let label1Text = label1.text, !label1Text.isEmpty {

View File

@ -43,7 +43,6 @@ import Foundation
super.setupView() super.setupView()
addMolecule(stack) addMolecule(stack)
stack.restack() stack.restack()
updateAccessibilityLabel()
} }
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
@ -72,8 +71,7 @@ import Foundation
// MARK: - Accessibility // MARK: - Accessibility
//-------------------------------------------------- //--------------------------------------------------
func updateAccessibilityLabel() { func getAccessibilityMessage() -> String? {
var message = "" var message = ""
if let eyebrowLabel = eyebrow.text, !eyebrowLabel.isEmpty { if let eyebrowLabel = eyebrow.text, !eyebrowLabel.isEmpty {
@ -91,19 +89,26 @@ import Foundation
if let bodyLabel = body.text, !bodyLabel.isEmpty { if let bodyLabel = body.text, !bodyLabel.isEmpty {
message += bodyLabel message += bodyLabel
} }
return message.count > 0 ? message : nil
}
func updateAccessibilityLabel() {
let linkShowing = link.titleLabel?.text?.count ?? 0 > 0 let linkShowing = link.titleLabel?.text?.count ?? 0 > 0
isAccessibilityElement = !linkShowing isAccessibilityElement = !linkShowing
link.isAccessibilityElement = linkShowing link.isAccessibilityElement = linkShowing
if !linkShowing { if !linkShowing {
// Make whole cell focusable if no link. // Make whole cell focusable if no link.
accessibilityLabel = message accessibilityLabel = getAccessibilityMessage()
accessibilityElements = nil
} else if let accessoryView = accessoryView {
// Both caret and link. Read all content on caret.
accessoryView.accessibilityLabel = getAccessibilityMessage()
accessibilityElements = [accessoryView, link]
} else { } else {
// Allow only radio button and link to be focused on. // Only link. Manually add accessibility elements to ensure they are read in the right order.
var elements: [UIView] = [] var elements: [Any] = []
if let eyeBrowText = eyebrow.text, !eyeBrowText.isEmpty { if let eyeBrowText = eyebrow.text, !eyeBrowText.isEmpty {
elements.append(eyebrow) elements.append(eyebrow)
} }
@ -119,11 +124,7 @@ import Foundation
if let bodyText = body.text, !bodyText.isEmpty { if let bodyText = body.text, !bodyText.isEmpty {
elements.append(body) elements.append(body)
} }
elements.append(link)
if linkShowing {
elements.append(link)
}
accessibilityElements = elements accessibilityElements = elements
} }
} }

View File

@ -24,8 +24,6 @@ import Foundation
super.setupView() super.setupView()
addMolecule(headlineBody) addMolecule(headlineBody)
isAccessibilityElement = true
updateAccessibilityLabel()
} }
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?){ open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?){
@ -46,7 +44,7 @@ import Foundation
//----------------------------------------------------- //-----------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let headlineLabel = headlineBody.headlineLabel.text { if let headlineLabel = headlineBody.headlineLabel.text {

View File

@ -42,8 +42,6 @@ import Foundation
super.setupView() super.setupView()
addMolecule(stack) addMolecule(stack)
stack.restack() stack.restack()
isAccessibilityElement = true
updateAccessibilityLabel()
} }
//-------------------------------------------------- //--------------------------------------------------
@ -77,7 +75,7 @@ import Foundation
//-------------------------------------------------- //--------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let leftText = leftLabel.text, !leftText.isEmpty { if let leftText = leftLabel.text, !leftText.isEmpty {

View File

@ -55,8 +55,6 @@ import Foundation
arrow.pinHeightAndWidth() arrow.pinHeightAndWidth()
arrowAndLabel2Stack.restack() arrowAndLabel2Stack.restack()
stack.restack() stack.restack()
isAccessibilityElement = true
updateAccessibilityLabel()
} }
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
@ -87,7 +85,7 @@ import Foundation
//-------------------------------------------------- //--------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let leftText = leftLabel.text, !leftText.isEmpty { if let leftText = leftLabel.text, !leftText.isEmpty {

View File

@ -54,7 +54,6 @@ import Foundation
((molecule as? StackItem)?.view as? Stack<StackModel>)?.restack() ((molecule as? StackItem)?.view as? Stack<StackModel>)?.restack()
} }
containingStack.restack() containingStack.restack()
isAccessibilityElement = false
} }
//------------------------------------------------------ //------------------------------------------------------

View File

@ -67,9 +67,6 @@ import Foundation
leftHeadline.numberOfLines = 1 leftHeadline.numberOfLines = 1
rightLabel.numberOfLines = 1 rightLabel.numberOfLines = 1
rightSubLabel.numberOfLines = 1 rightSubLabel.numberOfLines = 1
isAccessibilityElement = true
updateAccessibilityLabel()
} }
//---------------------------------------------------- //----------------------------------------------------
@ -107,7 +104,7 @@ import Foundation
//---------------------------------------------------- //----------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let leftHeadline = leftHeadline.text, !leftHeadline.isEmpty { if let leftHeadline = leftHeadline.text, !leftHeadline.isEmpty {

View File

@ -31,8 +31,6 @@ import UIKit
containerHelper.constrainView(view) containerHelper.constrainView(view)
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal) rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
rightLabel.setContentHuggingPriority(.defaultHigh, for: .vertical) rightLabel.setContentHuggingPriority(.defaultHigh, for: .vertical)
isAccessibilityElement = true
updateAccessibilityLabel()
} }
open override func updateView(_ size: CGFloat) { open override func updateView(_ size: CGFloat) {
@ -72,7 +70,7 @@ import UIKit
//---------------------------------------------------- //----------------------------------------------------
func updateAccessibilityLabel() { func updateAccessibilityLabel() {
isAccessibilityElement = true
var message = "" var message = ""
if let leftLabel = leftLabel.text, !leftLabel.isEmpty { if let leftLabel = leftLabel.text, !leftLabel.isEmpty {