added accessibilitytraits, value, label dynamically from modelJSON
This commit is contained in:
parent
022319c186
commit
d7c472b667
@ -75,6 +75,7 @@ import Foundation
|
|||||||
delegateObject, additionalData)
|
delegateObject, additionalData)
|
||||||
rightImageView.set(with: model.image, delegateObject, additionalData)
|
rightImageView.set(with: model.image, delegateObject, additionalData)
|
||||||
updateAccessibilityLabel()
|
updateAccessibilityLabel()
|
||||||
|
accessibilityTraits.update(with: model.accessibilityTraits ?? button.accessibilityTraits)
|
||||||
}
|
}
|
||||||
|
|
||||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||||
|
|||||||
@ -73,6 +73,7 @@
|
|||||||
delegateObject, additionalData)
|
delegateObject, additionalData)
|
||||||
rightImageView.set(with: model.image, delegateObject, additionalData)
|
rightImageView.set(with: model.image, delegateObject, additionalData)
|
||||||
updateAccessibilityLabel()
|
updateAccessibilityLabel()
|
||||||
|
accessibilityTraits.update(with: model.accessibilityTraits ?? button.accessibilityTraits)
|
||||||
}
|
}
|
||||||
|
|
||||||
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
open override class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
|
||||||
|
|||||||
@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
isAccessibilityElement = !linkShowing
|
isAccessibilityElement = !linkShowing
|
||||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
|
|
||||||
if !linkShowing {
|
if !linkShowing {
|
||||||
// Make whole cell focusable if no link.
|
// Make whole cell focusable if no link.
|
||||||
|
|||||||
@ -91,6 +91,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,7 +99,7 @@
|
|||||||
func updateAccessibilityLabel() {
|
func updateAccessibilityLabel() {
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
isAccessibilityElement = !linkShowing
|
isAccessibilityElement = !linkShowing
|
||||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
|
|
||||||
if !linkShowing {
|
if !linkShowing {
|
||||||
// Make whole cell focusable if no link.
|
// Make whole cell focusable if no link.
|
||||||
|
|||||||
@ -109,6 +109,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
isAccessibilityElement = !linkShowing
|
isAccessibilityElement = !linkShowing
|
||||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
|
|
||||||
if !linkShowing {
|
if !linkShowing {
|
||||||
// Make whole cell focusable if no link.
|
// Make whole cell focusable if no link.
|
||||||
|
|||||||
@ -89,7 +89,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -131,6 +131,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -147,7 +147,7 @@
|
|||||||
override public var accessibilityTraits: UIAccessibilityTraits {
|
override public var accessibilityTraits: UIAccessibilityTraits {
|
||||||
get {
|
get {
|
||||||
if (accessoryView != nil) {
|
if (accessoryView != nil) {
|
||||||
return .button
|
return listItemModel?.accessibilityTraits ?? .button
|
||||||
} else if (!(horizontalStack.stackModel?.molecules[1].gone ?? true)) {
|
} else if (!(horizontalStack.stackModel?.molecules[1].gone ?? true)) {
|
||||||
return heart.accessibilityTraits
|
return heart.accessibilityTraits
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -95,7 +95,7 @@ import Foundation
|
|||||||
// Ensures voice over does not read "selected" after user triggers action on cell.
|
// Ensures voice over does not read "selected" after user triggers action on cell.
|
||||||
override public var accessibilityTraits: UIAccessibilityTraits {
|
override public var accessibilityTraits: UIAccessibilityTraits {
|
||||||
get {
|
get {
|
||||||
return (accessoryView != nil) ? .button : .none
|
return (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
set {}
|
set {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,7 @@ import Foundation
|
|||||||
/// Ensures voice over does not read "selected" after user triggers action on cell.
|
/// Ensures voice over does not read "selected" after user triggers action on cell.
|
||||||
override public var accessibilityTraits: UIAccessibilityTraits {
|
override public var accessibilityTraits: UIAccessibilityTraits {
|
||||||
get {
|
get {
|
||||||
return (accessoryView != nil) ? .button : .none
|
return (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
set {}
|
set {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -91,6 +91,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,7 @@
|
|||||||
stack.restack()
|
stack.restack()
|
||||||
accessibilityValue = button.accessibilityValue
|
accessibilityValue = button.accessibilityValue
|
||||||
accessibilityHint = button.accessibilityHint
|
accessibilityHint = button.accessibilityHint
|
||||||
accessibilityTraits = .button
|
accessibilityTraits = (listItemModel?.accessibilityTraits ?? .button)
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
|
|||||||
@ -83,6 +83,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -100,7 +100,7 @@
|
|||||||
|
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
isAccessibilityElement = !linkShowing
|
isAccessibilityElement = !linkShowing
|
||||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
|
|
||||||
if !linkShowing {
|
if !linkShowing {
|
||||||
// Make whole cell focusable if no link.
|
// Make whole cell focusable if no link.
|
||||||
|
|||||||
@ -98,6 +98,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,8 +97,8 @@
|
|||||||
|
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
isAccessibilityElement = !linkShowing
|
isAccessibilityElement = !linkShowing
|
||||||
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? .button : .none
|
accessibilityTraits = (isAccessibilityElement && accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
|
|
||||||
if !linkShowing {
|
if !linkShowing {
|
||||||
// Make whole cell focusable if no link.
|
// Make whole cell focusable if no link.
|
||||||
accessibilityLabel = getAccessibilityMessage()
|
accessibilityLabel = getAccessibilityMessage()
|
||||||
|
|||||||
@ -89,7 +89,7 @@
|
|||||||
func updateAccessibilityLabel() {
|
func updateAccessibilityLabel() {
|
||||||
|
|
||||||
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
let linkShowing = eyebrowHeadlineBodyLink.link.titleLabel?.text?.count ?? 0 > 0
|
||||||
accessibilityTraits = .button
|
accessibilityTraits = listItemModel?.accessibilityTraits ?? .button
|
||||||
|
|
||||||
if !linkShowing && accessoryView == nil {
|
if !linkShowing && accessoryView == nil {
|
||||||
// Make whole cell focusable if one action
|
// Make whole cell focusable if one action
|
||||||
|
|||||||
@ -95,6 +95,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
accessibilityLabel = message
|
accessibilityLabel = message
|
||||||
accessibilityTraits = (accessoryView != nil) ? .button : .none
|
accessibilityTraits = (accessoryView != nil) ? (listItemModel?.accessibilityTraits ?? .button) : .none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,10 @@
|
|||||||
public var hideArrow: Bool?
|
public var hideArrow: Bool?
|
||||||
public var line: LineModel?
|
public var line: LineModel?
|
||||||
public var style: ListItemStyle?
|
public var style: ListItemStyle?
|
||||||
|
public var accessibilityTraits: UIAccessibilityTraits?
|
||||||
|
public var accessibilityText: String?
|
||||||
|
public var accessibilityValue: String?
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Keys
|
// MARK: - Keys
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -29,6 +32,9 @@
|
|||||||
case hideArrow
|
case hideArrow
|
||||||
case line
|
case line
|
||||||
case style
|
case style
|
||||||
|
case accessibilityTraits
|
||||||
|
case accessibilityText
|
||||||
|
case accessibilityValue
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -102,6 +108,9 @@
|
|||||||
hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow)
|
hideArrow = try typeContainer.decodeIfPresent(Bool.self, forKey: .hideArrow)
|
||||||
line = try typeContainer.decodeIfPresent(LineModel.self, forKey: .line)
|
line = try typeContainer.decodeIfPresent(LineModel.self, forKey: .line)
|
||||||
style = try typeContainer.decodeIfPresent(ListItemStyle.self, forKey: .style)
|
style = try typeContainer.decodeIfPresent(ListItemStyle.self, forKey: .style)
|
||||||
|
accessibilityTraits = try typeContainer.decodeIfPresent(UIAccessibilityTraits.self, forKey: .accessibilityTraits)
|
||||||
|
accessibilityText = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityText)
|
||||||
|
accessibilityValue = try typeContainer.decodeIfPresent(String.self, forKey: .accessibilityValue)
|
||||||
try super.init(from: decoder)
|
try super.init(from: decoder)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,5 +122,8 @@
|
|||||||
try container.encodeIfPresent(hideArrow, forKey: .hideArrow)
|
try container.encodeIfPresent(hideArrow, forKey: .hideArrow)
|
||||||
try container.encodeIfPresent(line, forKey: .line)
|
try container.encodeIfPresent(line, forKey: .line)
|
||||||
try container.encodeIfPresent(style, forKey: .style)
|
try container.encodeIfPresent(style, forKey: .style)
|
||||||
|
try container.encodeIfPresent(accessibilityTraits, forKey: .accessibilityTraits)
|
||||||
|
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
|
||||||
|
try container.encodeIfPresent(accessibilityValue, forKey: .accessibilityValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,9 @@ import Foundation
|
|||||||
public protocol AccessibilityModelProtocol {
|
public protocol AccessibilityModelProtocol {
|
||||||
|
|
||||||
var accessibilityIdentifier: String? { get set }
|
var accessibilityIdentifier: String? { get set }
|
||||||
|
var accessibilityTraits: UIAccessibilityTraits? { get set }
|
||||||
|
var accessibilityText: String? { get set }
|
||||||
|
var accessibilityValue: String? { get set }
|
||||||
}
|
}
|
||||||
|
|
||||||
public extension AccessibilityModelProtocol {
|
public extension AccessibilityModelProtocol {
|
||||||
@ -20,4 +23,19 @@ public extension AccessibilityModelProtocol {
|
|||||||
get { nil }
|
get { nil }
|
||||||
set { }
|
set { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var accessibilityTraits: UIAccessibilityTraits? {
|
||||||
|
get { nil }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
var accessibilityText: String? {
|
||||||
|
get { nil }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
var accessibilityValue: String? {
|
||||||
|
get { nil }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public enum ListItemStyle: String, Codable {
|
|||||||
case none
|
case none
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol ListItemModelProtocol: ContainerModelProtocol {
|
public protocol ListItemModelProtocol: ContainerModelProtocol, AccessibilityModelProtocol {
|
||||||
var line: LineModel? { get set }
|
var line: LineModel? { get set }
|
||||||
var action: ActionModelProtocol? { get set }
|
var action: ActionModelProtocol? { get set }
|
||||||
var hideArrow: Bool? { get set }
|
var hideArrow: Bool? { get set }
|
||||||
|
|||||||
@ -163,6 +163,15 @@ import UIKit
|
|||||||
|
|
||||||
// align if needed.
|
// align if needed.
|
||||||
containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol)
|
containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol)
|
||||||
|
|
||||||
|
if let traits = model.accessibilityTraits {
|
||||||
|
accessibilityTraits.update(with: traits)
|
||||||
|
}
|
||||||
|
if let accessibilityText = model.accessibilityText {
|
||||||
|
accessibilityLabel = accessibilityText
|
||||||
|
isAccessibilityElement = true
|
||||||
|
}
|
||||||
|
accessibilityValue = model.accessibilityValue
|
||||||
}
|
}
|
||||||
|
|
||||||
open func reset() {
|
open func reset() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user