diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index a0d0fa1bd0..c963439c65 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -533,6 +533,9 @@ typedef CALayer *(^ASDisplayNodeLayerBlock)(); @property (atomic, assign) BOOL accessibilityViewIsModal; @property (atomic, assign) BOOL shouldGroupAccessibilityChildren; +// Accessibility identification support +@property (nonatomic, copy) NSString *accessibilityIdentifier; + @end /* diff --git a/AsyncDisplayKit/Details/UIView+ASConvenience.h b/AsyncDisplayKit/Details/UIView+ASConvenience.h index 2b7df0c476..d1f0032469 100644 --- a/AsyncDisplayKit/Details/UIView+ASConvenience.h +++ b/AsyncDisplayKit/Details/UIView+ASConvenience.h @@ -75,6 +75,9 @@ @property (atomic, assign) BOOL shouldGroupAccessibilityChildren; */ +// Accessibility identification support +@property (nonatomic, copy) NSString *accessibilityIdentifier; + @end @interface CALayer (ASDisplayNodeLayer) diff --git a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm index a749089f2f..2f2994fd98 100644 --- a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm +++ b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm @@ -642,6 +642,18 @@ _setToViewOnly(shouldGroupAccessibilityChildren, shouldGroupAccessibilityChildren); } +- (NSString *)accessibilityIdentifier +{ + _bridge_prologue; + return _getFromViewOnly(accessibilityIdentifier); +} + +- (void)setAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + _bridge_prologue; + _setToViewOnly(accessibilityIdentifier, accessibilityIdentifier); +} + @end diff --git a/AsyncDisplayKit/Private/_ASPendingState.m b/AsyncDisplayKit/Private/_ASPendingState.m index dd7d33c3a2..b92f97d802 100644 --- a/AsyncDisplayKit/Private/_ASPendingState.m +++ b/AsyncDisplayKit/Private/_ASPendingState.m @@ -48,6 +48,7 @@ BOOL accessibilityElementsHidden; BOOL accessibilityViewIsModal; BOOL shouldGroupAccessibilityChildren; + NSString *accessibilityIdentifier; struct { // Properties @@ -97,6 +98,7 @@ int setAccessibilityElementsHidden:1; int setAccessibilityViewIsModal:1; int setShouldGroupAccessibilityChildren:1; + int setAccessibilityIdentifier:1; } _flags; } @@ -187,6 +189,7 @@ accessibilityElementsHidden = NO; accessibilityViewIsModal = NO; shouldGroupAccessibilityChildren = NO; + accessibilityIdentifier = nil; edgeAntialiasingMask = (kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge); return self; @@ -542,6 +545,19 @@ _flags.setShouldGroupAccessibilityChildren = YES; } +- (NSString *)accessibilityIdentifier +{ + return accessibilityIdentifier; +} + +- (void)setAccessibilityIdentifier:(NSString *)newAccessibilityIdentifier +{ + _flags.setAccessibilityIdentifier = YES; + if (accessibilityIdentifier != newAccessibilityIdentifier) { + accessibilityIdentifier = [newAccessibilityIdentifier copy]; + } +} + - (void)applyToLayer:(CALayer *)layer { if (_flags.setAnchorPoint) @@ -775,6 +791,9 @@ if (_flags.setShouldGroupAccessibilityChildren) view.shouldGroupAccessibilityChildren = shouldGroupAccessibilityChildren; + + if (_flags.setAccessibilityIdentifier) + view.accessibilityIdentifier = accessibilityIdentifier; } @end