@@ -101,6 +101,8 @@ - (UIView *)react_findClipView
101101@implementation RCTView
102102{
103103 UIColor *_backgroundColor;
104+NSMutableDictionary<NSString *, NSDictionary *> *accessibilityActionsNameMap;
105+NSMutableDictionary<NSString *, NSDictionary *> *accessibilityActionsLabelMap;
104106}
105107106108- (instancetype)initWithFrame:(CGRect)frame
@@ -156,33 +158,57 @@ - (NSString *)accessibilityLabel
156158return RCTRecursiveAccessibilityLabel(self);
157159}
158160161+-(void)setAccessibilityActions:(NSArray *)actions
162+{
163+if (!actions) {
164+return;
165+ }
166+ accessibilityActionsNameMap = [[NSMutableDictionary alloc] init];
167+ accessibilityActionsLabelMap = [[NSMutableDictionary alloc] init];
168+for (NSDictionary *action in actions) {
169+if (action[@"name"]) {
170+ accessibilityActionsNameMap[action[@"name"]] = action;
171+ }
172+if (action[@"label"]) {
173+ accessibilityActionsLabelMap[action[@"label"]] = action;
174+ }
175+ }
176+ _accessibilityActions = [actions copy];
177+}
178+159179- (NSArray <UIAccessibilityCustomAction *> *)accessibilityCustomActions
160180{
161181if (!self.accessibilityActions.count) {
162182return nil;
163183 }
164184165185NSMutableArray *actions = [NSMutableArray array];
166-for (NSString *action in self.accessibilityActions) {
167- [actions addObject:[[UIAccessibilityCustomAction alloc] initWithName:action
168-target:self
169-selector:@selector(didActivateAccessibilityCustomAction:)]];
186+for (NSDictionary *action in self.accessibilityActions) {
187+if (action[@"label"]) {
188+ [actions addObject:[[UIAccessibilityCustomAction alloc] initWithName:action[@"label"]
189+target:self
190+selector:@selector(didActivateAccessibilityCustomAction:)]];
191+ }
170192 }
171193172194return [actions copy];
173195}
174196175197- (BOOL)didActivateAccessibilityCustomAction:(UIAccessibilityCustomAction *)action
176198{
177-if (!_onAccessibilityAction) {
199+if (!_onAccessibilityAction || !accessibilityActionsLabelMap) {
178200return NO;
179201 }
180202181-_onAccessibilityAction(@{
182-@"action": action.name,
183-@"target": self.reactTag
184- });
203+// iOS defines the name as the localized label, so use our map to convert this back to the non-localized action namne when passing to JS. This allows for standard action names across platforms.
185204205+NSDictionary *actionObject = accessibilityActionsLabelMap[action.name];
206+if (actionObject) {
207+_onAccessibilityAction(@{
208+@"actionName": actionObject[@"name"],
209+@"actionTarget": self.reactTag
210+ });
211+ }
186212return YES;
187213}
188214@@ -327,9 +353,24 @@ - (BOOL)isAccessibilityElement
327353return NO;
328354}
329355356+- (BOOL)performAccessibilityAction:(NSString *) name
357+{
358+if (_onAccessibilityAction && accessibilityActionsNameMap[name]) {
359+_onAccessibilityAction(@{
360+@"actionName" : name,
361+@"actionTarget" : self.reactTag
362+ });
363+return YES;
364+ }
365+return NO;
366+}
367+330368- (BOOL)accessibilityActivate
331369{
332-if (_onAccessibilityTap) {
370+if ([self performAccessibilityAction:@"activate"]) {
371+return YES;
372+ }
373+else if (_onAccessibilityTap) {
333374_onAccessibilityTap(nil);
334375return YES;
335376 } else {
@@ -339,7 +380,9 @@ - (BOOL)accessibilityActivate
339380340381- (BOOL)accessibilityPerformMagicTap
341382{
342-if (_onMagicTap) {
383+if ([self performAccessibilityAction:@"magicTap"]) {
384+return YES;
385+ } else if (_onMagicTap) {
343386_onMagicTap(nil);
344387return YES;
345388 } else {
@@ -349,14 +392,26 @@ - (BOOL)accessibilityPerformMagicTap
349392350393- (BOOL)accessibilityPerformEscape
351394{
352-if (_onAccessibilityEscape) {
395+if ([self performAccessibilityAction:@"escape"]) {
396+return YES;
397+ } else if (_onAccessibilityEscape) {
353398_onAccessibilityEscape(nil);
354399return YES;
355400 } else {
356401return NO;
357402 }
358403}
359404405+- (void)accessibilityIncrement
406+{
407+ [self performAccessibilityAction:@"increment"];
408+}
409+410+- (void)accessibilityDecrement
411+{
412+ [self performAccessibilityAction:@"decrement"];
413+}
414+360415- (NSString *)description
361416{
362417NSString *superDescription = super.description;