Merge branch 'feature/accessibility_update_numbered' into 'develop'
Feature/accessibility update numbered See merge request BPHV_MIPS/mvm_core_ui!492
This commit is contained in:
commit
c1f67f08f1
@ -157,9 +157,9 @@ import MVMCore
|
||||
override public init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
accessibilityTraits = .button
|
||||
isAccessibilityElement = true
|
||||
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "checkbox_action_hint")
|
||||
accessibilityTraits = .button
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
|
||||
@ -147,8 +147,8 @@ import UIKit
|
||||
|
||||
addTarget(self, action: #selector(tapAction), for: .touchUpInside)
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = .button
|
||||
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "radio_action_hint")
|
||||
accessibilityTraits = .button
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
|
||||
@ -115,12 +115,12 @@ open class BarsIndicatorView: CarouselIndicator {
|
||||
|
||||
for i in 0..<numberOfPages {
|
||||
let bar = View()
|
||||
bar.accessibilityTraits = .button
|
||||
bar.isAccessibilityElement = true
|
||||
if let accessibleValueFormat = accessibilityValueFormat, let accessibleIndex = ordinalFormatter.string(from: NSNumber(value: i + 1)) {
|
||||
bar.accessibilityLabel = String(format: accessibleValueFormat, accessibleIndex, numberOfPages)
|
||||
}
|
||||
bar.accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "AccTabHint")
|
||||
bar.accessibilityTraits = .button
|
||||
bar.widthAnchor.constraint(equalToConstant: BarsIndicatorView.indicatorBarWidth).isActive = true
|
||||
bar.backgroundColor = isEnabled ? (i == currentIndex ? currentIndicatorColor : indicatorColor) : disabledIndicatorColor
|
||||
let barHeight = i == currentIndex ? BarsIndicatorView.indicatorBarHeight.selected : BarsIndicatorView.indicatorBarHeight.unselected
|
||||
|
||||
@ -215,10 +215,10 @@ public typealias ActionBlockConfirmation = () -> (Bool)
|
||||
super.setupView()
|
||||
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = .button
|
||||
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "AccToggleHint")
|
||||
accessibilityLabel = MVMCoreUIUtility.hardcodedString(withKey: "Toggle_buttonlabel")
|
||||
|
||||
accessibilityTraits = .button
|
||||
|
||||
heightConstraint = heightAnchor.constraint(equalToConstant: Self.containerSize.height)
|
||||
heightConstraint?.isActive = true
|
||||
|
||||
|
||||
@ -58,10 +58,8 @@ import Foundation
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
verticalStack.restack()
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = button.accessibilityTraits
|
||||
accessibilityHint = button.accessibilityHint
|
||||
updateAccessibilityLabel()
|
||||
accessibilityTraits = button.accessibilityTraits
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -100,10 +98,8 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
var message = ""
|
||||
|
||||
if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty {
|
||||
message += eyebrowText + ", "
|
||||
}
|
||||
@ -120,11 +116,28 @@ import Foundation
|
||||
message += body2Text + ", "
|
||||
}
|
||||
|
||||
if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty {
|
||||
if let rightImageViewText = rightImageView.imageView.accessibilityLabel, !rightImageViewText.isEmpty {
|
||||
message += rightImageViewText
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
return message.count > 0 ? message : nil
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
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
|
||||
if let message = getAccessibilityMessage(),
|
||||
let buttonTitle = button.titleLabel?.text {
|
||||
accessibilityLabel = message + ", " + buttonTitle
|
||||
} else {
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open override func accessibilityActivate() -> Bool {
|
||||
|
||||
@ -58,10 +58,8 @@ import Foundation
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
verticalStack.restack()
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = button.accessibilityTraits
|
||||
accessibilityHint = button.accessibilityHint
|
||||
updateAccessibilityLabel()
|
||||
accessibilityTraits = button.accessibilityTraits
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -100,10 +98,8 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
var message = ""
|
||||
|
||||
if let eyebrowText = eyebrow.text, !eyebrowText.isEmpty {
|
||||
message += eyebrowText + ", "
|
||||
}
|
||||
@ -120,11 +116,28 @@ import Foundation
|
||||
message += body2Text + ", "
|
||||
}
|
||||
|
||||
if let rightImageViewText = rightImageView.accessibilityLabel, !rightImageViewText.isEmpty {
|
||||
if let rightImageViewText = rightImageView.imageView.accessibilityLabel, !rightImageViewText.isEmpty {
|
||||
message += rightImageViewText
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
return message.count > 0 ? message : nil
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
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
|
||||
if let message = getAccessibilityMessage(),
|
||||
let buttonTitle = button.titleLabel?.text {
|
||||
accessibilityLabel = message + ", " + buttonTitle
|
||||
} else {
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open override func accessibilityActivate() -> Bool {
|
||||
|
||||
@ -114,7 +114,7 @@ import Foundation
|
||||
message += body2Text + ", "
|
||||
}
|
||||
|
||||
if let rightImageLabel = rightImage.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
if let rightImageLabel = rightImage.imageView.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
message += rightImageLabel
|
||||
}
|
||||
|
||||
@ -145,8 +145,8 @@ import Foundation
|
||||
views.append(twoLinkView.leftLink)
|
||||
views.append(twoLinkView.rightLink)
|
||||
|
||||
if let rightImageLabel = rightImage.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
views.append(rightImage)
|
||||
if let rightImageLabel = rightImage.imageView.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
views.append(rightImage.imageView)
|
||||
}
|
||||
|
||||
accessibilityElements = views
|
||||
|
||||
@ -111,7 +111,7 @@ import Foundation
|
||||
message += body2Text + ", "
|
||||
}
|
||||
|
||||
if let rightImageLabel = rightImage.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
if let rightImageLabel = rightImage.imageView.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
message += rightImageLabel
|
||||
}
|
||||
|
||||
@ -142,8 +142,8 @@ import Foundation
|
||||
views.append(twoLinkView.leftLink)
|
||||
views.append(twoLinkView.rightLink)
|
||||
|
||||
if let rightImageLabel = rightImage.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
views.append(rightImage)
|
||||
if let rightImageLabel = rightImage.imageView.accessibilityLabel, !rightImageLabel.isEmpty {
|
||||
views.append(rightImage.imageView)
|
||||
}
|
||||
|
||||
accessibilityElements = views
|
||||
|
||||
@ -54,8 +54,6 @@ import Foundation
|
||||
arrow.pinHeightAndWidth()
|
||||
arrowAndLabel2Stack.restack()
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
@ -92,7 +90,7 @@ import Foundation
|
||||
//-----------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let label1Text = label1.text, !label1Text.isEmpty {
|
||||
|
||||
@ -49,11 +49,9 @@ import Foundation
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
|
||||
isAccessibilityElement = true
|
||||
checkbox.isAccessibilityElement = false
|
||||
accessibilityTraits = checkbox.accessibilityTraits
|
||||
accessibilityHint = checkbox.accessibilityHint
|
||||
// Update accessibility label on radio button state change.
|
||||
accessibilityTraits = checkbox.accessibilityTraits
|
||||
// Update accessibility label on checkbox state change.
|
||||
observation = observe(\.checkbox.isSelected, options: [.new]) { [weak self] _, _ in
|
||||
self?.updateAccessibilityLabel()
|
||||
}
|
||||
@ -92,41 +90,19 @@ import Foundation
|
||||
message += checkboxLabel + ", "
|
||||
}
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text, !eyebrowLabel.isEmpty {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text, !headlineLabel.isEmpty {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text, !bodyLabel.isEmpty {
|
||||
message += bodyLabel
|
||||
if let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() {
|
||||
message += label
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
|
||||
isAccessibilityElement = !linkShowing
|
||||
checkbox.isAccessibilityElement = linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
// Allow only checkbox and link to be focused on.
|
||||
checkbox.accessibilityLabel = message
|
||||
var elements: [UIView] = []
|
||||
|
||||
if message.count > 0 {
|
||||
elements.append(checkbox)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
accessibilityElements = [checkbox, eyebrowHeadlineBodyLink.link]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -49,10 +49,9 @@ import Foundation
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
checkbox.isAccessibilityElement = false
|
||||
accessibilityTraits = checkbox.accessibilityTraits
|
||||
accessibilityHint = checkbox.accessibilityHint
|
||||
// Update accessibility label on radio button state change.
|
||||
accessibilityTraits = checkbox.accessibilityTraits
|
||||
// Update accessibility label on checkbox state change.
|
||||
observation = observe(\.checkbox.isSelected, options: [.new]) { [weak self] _, _ in
|
||||
self?.updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
@ -42,7 +42,6 @@ import Foundation
|
||||
leftImage.imageView.contentMode = .scaleAspectFit
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -63,57 +62,37 @@ import Foundation
|
||||
return 140
|
||||
}
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
guard let leftImageLabel = leftImage.imageView.accessibilityLabel else {
|
||||
return eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
}
|
||||
guard let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() else {
|
||||
return leftImageLabel
|
||||
}
|
||||
return leftImageLabel + ", " + label
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
var message = ""
|
||||
|
||||
if let leftImageLabel = leftImage.accessibilityLabel {
|
||||
message += leftImageLabel + ", "
|
||||
}
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else if let accessoryView = accessoryView {
|
||||
// Both caret and link. Read all content on caret.
|
||||
accessoryView.accessibilityLabel = getAccessibilityMessage()
|
||||
accessibilityElements = [accessoryView, eyebrowHeadlineBodyLink.link]
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
var elements: [UIView] = []
|
||||
|
||||
if let leftImageLabel = leftImage.accessibilityLabel, !leftImageLabel.isEmpty {
|
||||
elements.append(leftImage)
|
||||
// Only link. Manually add accessibility elements to ensure they are read in the right order.
|
||||
var elements: [Any] = []
|
||||
if let leftImageLabel = leftImage.imageView.accessibilityLabel, !leftImageLabel.isEmpty {
|
||||
elements.append(leftImage.imageView)
|
||||
}
|
||||
|
||||
if let eyeBrowText = eyebrowHeadlineBodyLink.eyebrow.text, !eyeBrowText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.eyebrow)
|
||||
if let otherElements = eyebrowHeadlineBodyLink.getAccessibilityElements() {
|
||||
elements.append(otherElements)
|
||||
}
|
||||
|
||||
if let headlineText = eyebrowHeadlineBodyLink.headline.text, !headlineText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.headline)
|
||||
}
|
||||
|
||||
if let bodyText = eyebrowHeadlineBodyLink.body.text, !bodyText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.body)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,8 +48,6 @@ import UIKit
|
||||
rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 902), for: .horizontal)
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -78,10 +76,10 @@ import UIKit
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftImageLabel = leftImage.accessibilityLabel {
|
||||
if let leftImageLabel = leftImage.imageView.accessibilityLabel {
|
||||
message += leftImageLabel + ", "
|
||||
}
|
||||
|
||||
@ -94,5 +92,6 @@ import UIKit
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,10 +58,8 @@ import Foundation
|
||||
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
|
||||
rightLabel.setContentHuggingPriority(UILayoutPriority(rawValue: 900), for: .horizontal)
|
||||
rightLabel.numberOfLines = 1
|
||||
isAccessibilityElement = true
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -93,10 +91,10 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftImageLabel = leftImage.accessibilityLabel {
|
||||
if let leftImageLabel = leftImage.imageView.accessibilityLabel {
|
||||
message += leftImageLabel + ", "
|
||||
}
|
||||
|
||||
@ -113,5 +111,6 @@ import Foundation
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,7 +40,6 @@ import Foundation
|
||||
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//---------------------------------------------------
|
||||
@ -76,56 +75,37 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
guard let leftLabel = leftLabel.text else {
|
||||
return eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
}
|
||||
guard let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() else {
|
||||
return leftLabel
|
||||
}
|
||||
return leftLabel + ", " + label
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
var message = ""
|
||||
|
||||
if let leftLabel = leftLabel.text {
|
||||
message += leftLabel + ", "
|
||||
}
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel
|
||||
}
|
||||
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else if let accessoryView = accessoryView {
|
||||
// Both caret and link. Read all content on caret.
|
||||
accessoryView.accessibilityLabel = getAccessibilityMessage()
|
||||
accessibilityElements = [accessoryView, eyebrowHeadlineBodyLink.link]
|
||||
} else {
|
||||
var elements: [UIView] = []
|
||||
|
||||
// Only link. Manually add accessibility elements to ensure they are read in the right order.
|
||||
var elements: [Any] = []
|
||||
if let leftLabelText = leftLabel.text, !leftLabelText.isEmpty {
|
||||
elements.append(leftLabel)
|
||||
}
|
||||
|
||||
if let eyeBrowText = eyebrowHeadlineBodyLink.eyebrow.text, !eyeBrowText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.eyebrow)
|
||||
if let otherElements = eyebrowHeadlineBodyLink.getAccessibilityElements() {
|
||||
elements.append(otherElements)
|
||||
}
|
||||
|
||||
if let headlineText = eyebrowHeadlineBodyLink.headline.text, !headlineText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.headline)
|
||||
}
|
||||
|
||||
if let bodyText = eyebrowHeadlineBodyLink.body.text, !bodyText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.body)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,41 +89,19 @@ import Foundation
|
||||
message += radioButtonLabel + ", "
|
||||
}
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel
|
||||
if let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() {
|
||||
message += label
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
radioButton.isAccessibilityElement = linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
radioButton.accessibilityLabel = message
|
||||
|
||||
var elements: [UIView] = []
|
||||
|
||||
if !message.isEmpty {
|
||||
elements.append(radioButton)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
accessibilityElements = [radioButton, eyebrowHeadlineBodyLink.link]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,9 +50,9 @@ import UIKit
|
||||
eyebrowHeadlineBodyLink.body.textColor = .mvmOrangeAA
|
||||
eyebrowHeadlineBodyLink.headline.setFontStyle(.BoldBodySmall)
|
||||
|
||||
accessibilityTraits = radioButton.accessibilityTraits
|
||||
accessibilityHint = radioButton.accessibilityHint
|
||||
|
||||
accessibilityTraits = radioButton.accessibilityTraits
|
||||
|
||||
// Update accessibility label on radio button state change.
|
||||
observation = observe(\.radioButton.isSelected, options: [.new]) { [weak self] _, _ in
|
||||
self?.updateAccessibilityLabel()
|
||||
@ -103,44 +103,23 @@ import UIKit
|
||||
message += radioButtonLabel + ", "
|
||||
}
|
||||
|
||||
if let leftImageLabel = leftImage.accessibilityLabel {
|
||||
if let leftImageLabel = leftImage.imageView.accessibilityLabel {
|
||||
message += leftImageLabel + ", "
|
||||
}
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel
|
||||
if let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() {
|
||||
message += label
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
radioButton.isAccessibilityElement = linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
radioButton.accessibilityLabel = message
|
||||
var elements: [UIView] = []
|
||||
|
||||
if !message.isEmpty {
|
||||
elements.append(radioButton)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
accessibilityElements = [radioButton, eyebrowHeadlineBodyLink.link]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,9 +47,8 @@ open class ListLeftVariableRadioButtonBodyText: TableViewCell {
|
||||
|
||||
// Make the whole cell focusable.
|
||||
isAccessibilityElement = true
|
||||
radioButton.isAccessibilityElement = false
|
||||
accessibilityTraits = radioButton.accessibilityTraits
|
||||
accessibilityHint = radioButton.accessibilityHint
|
||||
accessibilityTraits = radioButton.accessibilityTraits
|
||||
updateAccessibilityLabel()
|
||||
|
||||
// Update accessibility label on radio button state change.
|
||||
|
||||
@ -78,8 +78,6 @@ import Foundation
|
||||
stack.restack()
|
||||
horizontalStack.restack()
|
||||
labelStack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//------------------------------------------------------
|
||||
@ -115,7 +113,7 @@ import Foundation
|
||||
//------------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftHeadlineText = leftHeadline.text {
|
||||
@ -135,5 +133,6 @@ import Foundation
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,7 +43,6 @@ import Foundation
|
||||
super.setupView()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
@ -72,8 +71,7 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
var message = ""
|
||||
|
||||
if let eyebrowLabel = eyebrow.text, !eyebrowLabel.isEmpty {
|
||||
@ -91,19 +89,31 @@ import Foundation
|
||||
if let bodyLabel = body.text, !bodyLabel.isEmpty {
|
||||
message += bodyLabel
|
||||
}
|
||||
|
||||
return message.count > 0 ? message : nil
|
||||
}
|
||||
|
||||
// Ensures voice over does not read "selected" after user triggers action on cell.
|
||||
override public var accessibilityTraits: UIAccessibilityTraits {
|
||||
get {
|
||||
return (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
set {}
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
let linkShowing = link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else if let accessoryView = accessoryView {
|
||||
// Both caret and link. Read all content on caret.
|
||||
accessoryView.accessibilityLabel = getAccessibilityMessage()
|
||||
accessibilityElements = [accessoryView, link]
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
var elements: [UIView] = []
|
||||
|
||||
|
||||
// Only link. Manually add accessibility elements to ensure they are read in the right order.
|
||||
var elements: [Any] = []
|
||||
if let eyeBrowText = eyebrow.text, !eyeBrowText.isEmpty {
|
||||
elements.append(eyebrow)
|
||||
}
|
||||
@ -119,11 +129,7 @@ import Foundation
|
||||
if let bodyText = body.text, !bodyText.isEmpty {
|
||||
elements.append(body)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(link)
|
||||
}
|
||||
|
||||
elements.append(link)
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,8 +24,6 @@ import Foundation
|
||||
super.setupView()
|
||||
|
||||
addMolecule(headlineBody)
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?){
|
||||
@ -46,7 +44,7 @@ import Foundation
|
||||
//-----------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let headlineLabel = headlineBody.headlineLabel.text {
|
||||
|
||||
@ -41,8 +41,6 @@ import Foundation
|
||||
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -75,7 +73,7 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftLabelText = leftLabel.text, !leftLabelText.isEmpty {
|
||||
@ -91,5 +89,6 @@ import Foundation
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,9 +47,9 @@ import Foundation
|
||||
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
accessibilityValue = button.accessibilityValue
|
||||
accessibilityHint = button.accessibilityHint
|
||||
accessibilityTraits = .button
|
||||
}
|
||||
|
||||
//-----------------------------------------------------
|
||||
@ -74,48 +74,36 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//----------------------------------------------------
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
guard let buttonText = button.titleLabel?.text else {
|
||||
return eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
}
|
||||
guard let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() else {
|
||||
return buttonText
|
||||
}
|
||||
return label + ", " + buttonText
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
var message = ""
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel + ", "
|
||||
}
|
||||
|
||||
if let buttonLabel = button.accessibilityLabel {
|
||||
message += buttonLabel
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
|
||||
isAccessibilityElement = !linkShowing
|
||||
button.isAccessibilityElement = linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
if !linkShowing && accessoryView == nil {
|
||||
// Make whole cell focusable if one action
|
||||
isAccessibilityElement = true
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
button.accessibilityLabel = message
|
||||
var elements: [UIView] = []
|
||||
|
||||
if !message.isEmpty {
|
||||
elements.append(button)
|
||||
// Make buttons focusable.
|
||||
isAccessibilityElement = false
|
||||
var elements: [Any] = []
|
||||
if let accessoryView = accessoryView {
|
||||
accessoryView.accessibilityLabel = eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
elements.append(accessoryView)
|
||||
} else {
|
||||
button.accessibilityLabel = getAccessibilityMessage()
|
||||
}
|
||||
|
||||
elements.append(button)
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,8 +40,6 @@ import Foundation
|
||||
rightImage.addSizeConstraintsForAspectRatio = true
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
@ -72,17 +70,18 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftLabelText = leftLabel.text, !leftLabelText.isEmpty {
|
||||
message += leftLabelText + ", "
|
||||
}
|
||||
|
||||
if let rightImageText = rightImage.accessibilityLabel, !rightImageText.isEmpty {
|
||||
if let rightImageText = rightImage.imageView.accessibilityLabel, !rightImageText.isEmpty {
|
||||
message += rightImageText
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -67,7 +67,6 @@ import Foundation
|
||||
arrow.pinHeightAndWidth()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
@ -89,57 +88,36 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
guard let rightLabelText = rightLabel.text else {
|
||||
return eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
}
|
||||
guard let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() else {
|
||||
return rightLabelText
|
||||
}
|
||||
return label + ", " + rightLabelText
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
isAccessibilityElement = !linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
var message = ""
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel + ", "
|
||||
}
|
||||
|
||||
if let rightLabelText = rightLabel.text {
|
||||
message += rightLabelText
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else if let accessoryView = accessoryView {
|
||||
// Both caret and link. Read all content on caret.
|
||||
accessoryView.accessibilityLabel = getAccessibilityMessage()
|
||||
accessibilityElements = [accessoryView, eyebrowHeadlineBodyLink.link]
|
||||
} else {
|
||||
var elements: [UIView] = []
|
||||
|
||||
if let eyebrowText = eyebrowHeadlineBodyLink.eyebrow.text, !eyebrowText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.eyebrow)
|
||||
// Only link. Manually add accessibility elements to ensure they are read in the right order.
|
||||
var elements: [Any] = []
|
||||
if let otherElements = eyebrowHeadlineBodyLink.getAccessibilityElements() {
|
||||
elements.append(otherElements)
|
||||
}
|
||||
|
||||
if let headlineText = eyebrowHeadlineBodyLink.headline.text, !headlineText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.headline)
|
||||
}
|
||||
|
||||
if let bodyText = eyebrowHeadlineBodyLink.body.text, !bodyText.isEmpty {
|
||||
elements.append(eyebrowHeadlineBodyLink.body)
|
||||
}
|
||||
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
if let rightLabelText = rightLabel.text, !rightLabelText.isEmpty {
|
||||
elements.append(rightLabel)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,8 +54,6 @@ import Foundation
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
arrowAndRightLabelStack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -87,7 +85,7 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let headlineText = headlineBody.headlineLabel.text, !headlineText.isEmpty {
|
||||
@ -103,5 +101,6 @@ import Foundation
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,7 +47,6 @@ import Foundation
|
||||
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -72,52 +71,41 @@ import Foundation
|
||||
// MARK: - Accessibility
|
||||
//--------------------------------------------------
|
||||
|
||||
func getAccessibilityMessage() -> String? {
|
||||
guard let linkText = link.titleLabel?.text else {
|
||||
return eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
}
|
||||
guard let label = eyebrowHeadlineBodyLink.getAccessibilityMessage() else {
|
||||
return linkText
|
||||
}
|
||||
return label + ", " + linkText
|
||||
}
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
var message = ""
|
||||
|
||||
if let eyebrowLabel = eyebrowHeadlineBodyLink.eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = eyebrowHeadlineBodyLink.headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = eyebrowHeadlineBodyLink.body.text {
|
||||
message += bodyLabel + ", "
|
||||
}
|
||||
|
||||
if let linkLabel = link.accessibilityLabel {
|
||||
message += linkLabel
|
||||
}
|
||||
|
||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||
|
||||
isAccessibilityElement = !linkShowing
|
||||
link.isAccessibilityElement = linkShowing
|
||||
eyebrowHeadlineBodyLink.link.isAccessibilityElement = linkShowing
|
||||
|
||||
if !linkShowing {
|
||||
// Make whole cell focusable if no link.
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = .button
|
||||
if !linkShowing && accessoryView == nil {
|
||||
// Make whole cell focusable if one action
|
||||
isAccessibilityElement = true
|
||||
accessibilityLabel = getAccessibilityMessage()
|
||||
} else {
|
||||
// Allow only radio button and link to be focused on.
|
||||
link.accessibilityLabel = message
|
||||
var elements: [UIView] = []
|
||||
|
||||
// Make buttons focusable.
|
||||
isAccessibilityElement = false
|
||||
var elements: [Any] = []
|
||||
if let accessoryView = accessoryView {
|
||||
accessoryView.accessibilityLabel = eyebrowHeadlineBodyLink.getAccessibilityMessage()
|
||||
elements.append(accessoryView)
|
||||
} else {
|
||||
link.accessibilityLabel = getAccessibilityMessage()
|
||||
}
|
||||
elements.append(link)
|
||||
if linkShowing {
|
||||
elements.append(eyebrowHeadlineBodyLink.link)
|
||||
}
|
||||
|
||||
if !message.isEmpty {
|
||||
elements.append(link)
|
||||
}
|
||||
|
||||
accessibilityElements = elements
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
open override func accessibilityActivate() -> Bool {
|
||||
return link.accessibilityActivate()
|
||||
}
|
||||
|
||||
@ -51,8 +51,6 @@ import Foundation
|
||||
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -86,7 +84,7 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftLabelText = leftLabel.text, !leftLabelText.isEmpty {
|
||||
@ -98,5 +96,6 @@ import Foundation
|
||||
}
|
||||
|
||||
accessibilityLabel = message
|
||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,8 +42,6 @@ import Foundation
|
||||
super.setupView()
|
||||
addMolecule(stack)
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -77,7 +75,7 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftText = leftLabel.text, !leftText.isEmpty {
|
||||
|
||||
@ -55,8 +55,6 @@ import Foundation
|
||||
arrow.pinHeightAndWidth()
|
||||
arrowAndLabel2Stack.restack()
|
||||
stack.restack()
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
|
||||
@ -87,7 +85,7 @@ import Foundation
|
||||
//--------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftText = leftLabel.text, !leftText.isEmpty {
|
||||
|
||||
@ -54,7 +54,6 @@ import Foundation
|
||||
((molecule as? StackItem)?.view as? Stack<StackModel>)?.restack()
|
||||
}
|
||||
containingStack.restack()
|
||||
isAccessibilityElement = false
|
||||
}
|
||||
|
||||
//------------------------------------------------------
|
||||
|
||||
@ -67,9 +67,6 @@ import Foundation
|
||||
leftHeadline.numberOfLines = 1
|
||||
rightLabel.numberOfLines = 1
|
||||
rightSubLabel.numberOfLines = 1
|
||||
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
@ -107,7 +104,7 @@ import Foundation
|
||||
//----------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftHeadline = leftHeadline.text, !leftHeadline.isEmpty {
|
||||
|
||||
@ -31,8 +31,6 @@ import UIKit
|
||||
containerHelper.constrainView(view)
|
||||
rightLabel.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 900), for: .horizontal)
|
||||
rightLabel.setContentHuggingPriority(.defaultHigh, for: .vertical)
|
||||
isAccessibilityElement = true
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
open override func updateView(_ size: CGFloat) {
|
||||
@ -72,7 +70,7 @@ import UIKit
|
||||
//----------------------------------------------------
|
||||
|
||||
func updateAccessibilityLabel() {
|
||||
|
||||
isAccessibilityElement = true
|
||||
var message = ""
|
||||
|
||||
if let leftLabel = leftLabel.text, !leftLabel.isEmpty {
|
||||
|
||||
@ -69,4 +69,44 @@ import UIKit
|
||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||
return 65
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Accessibility Helpers
|
||||
//--------------------------------------------------
|
||||
|
||||
/// Returns the labels text in one message.
|
||||
func getAccessibilityMessage() -> String? {
|
||||
var message = ""
|
||||
|
||||
if let eyebrowLabel = eyebrow.text {
|
||||
message += eyebrowLabel + ", "
|
||||
}
|
||||
|
||||
if let headlineLabel = headline.text {
|
||||
message += headlineLabel + ", "
|
||||
}
|
||||
|
||||
if let bodyLabel = body.text {
|
||||
message += bodyLabel
|
||||
}
|
||||
return message.count > 0 ? message : nil
|
||||
}
|
||||
|
||||
/// Returns an array of the appropriate accessibility elements.
|
||||
func getAccessibilityElements() -> [Any]? {
|
||||
var elements: [UIView] = []
|
||||
if eyebrow.hasText {
|
||||
elements.append(eyebrow)
|
||||
}
|
||||
if headline.hasText {
|
||||
elements.append(headline)
|
||||
}
|
||||
if body.hasText {
|
||||
elements.append(body)
|
||||
}
|
||||
if link.titleLabel?.text?.count ?? 0 > 0 {
|
||||
elements.append(link)
|
||||
}
|
||||
return elements.count > 0 ? elements : nil
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,8 +73,8 @@ open class ThreeHeadlineBodyLink: View {
|
||||
bottomAnchor.constraint(equalTo: link.bottomAnchor).isActive = true
|
||||
|
||||
isAccessibilityElement = true
|
||||
accessibilityTraits = link.accessibilityTraits
|
||||
accessibilityHint = link.accessibilityHint
|
||||
accessibilityTraits = link.accessibilityTraits
|
||||
updateAccessibilityLabel()
|
||||
}
|
||||
|
||||
|
||||
@ -205,8 +205,8 @@ import UIKit
|
||||
let caret = CaretView(lineWidth: 1)
|
||||
caret.translatesAutoresizingMaskIntoConstraints = true
|
||||
caret.isAccessibilityElement = true
|
||||
caret.accessibilityTraits = .button
|
||||
caret.accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "AccTabHint")
|
||||
caret.accessibilityTraits = .button
|
||||
caret.size = .small(.vertical)
|
||||
if let size = caret.size?.dimensions() {
|
||||
caret.frame = CGRect(origin: CGPoint.zero, size: size)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user