mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Make views tappable with screen reader
Summary: Changelog: [Internal] In paper implementation: `accessibilityActivate` returns NO in case `onAccessibilityTap` is nil. In Fabric we have no option to detect whether `onAccessibilityTap` is nil or isn't but we don't want to prevent VoiceOver from tapping an element. This could potentially trigger action associated with element twice. Let's say you have `onPress` and `onAccessibilityTap`, it will trigger both if you trigger action through VoiceOver. Reviewed By: shergin Differential Revision: D18572432 fbshipit-source-id: c5ac002317c798a10045b6f05738299d0ae27456
This commit is contained in:
committed by
Facebook Github Bot
parent
3f7e0a2c96
commit
5a9b7d7adc
@@ -531,26 +531,42 @@ static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
|
||||
|
||||
- (BOOL)accessibilityActivate
|
||||
{
|
||||
_eventEmitter->onAccessibilityTap();
|
||||
return YES;
|
||||
if (_eventEmitter && _props->onAccessibilityTap) {
|
||||
_eventEmitter->onAccessibilityTap();
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)accessibilityPerformMagicTap
|
||||
{
|
||||
_eventEmitter->onAccessibilityMagicTap();
|
||||
return YES;
|
||||
if (_eventEmitter && _props->onAccessibilityMagicTap) {
|
||||
_eventEmitter->onAccessibilityMagicTap();
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)accessibilityPerformEscape
|
||||
{
|
||||
_eventEmitter->onAccessibilityEscape();
|
||||
return YES;
|
||||
if (_eventEmitter && _props->onAccessibilityEscape) {
|
||||
_eventEmitter->onAccessibilityEscape();
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)didActivateAccessibilityCustomAction:(UIAccessibilityCustomAction *)action
|
||||
{
|
||||
_eventEmitter->onAccessibilityAction(RCTStringFromNSString(action.name));
|
||||
return YES;
|
||||
if (_eventEmitter && _props->onAccessibilityAction) {
|
||||
_eventEmitter->onAccessibilityAction(RCTStringFromNSString(action.name));
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (SharedTouchEventEmitter)touchEventEmitterAtPoint:(CGPoint)point
|
||||
|
||||
@@ -393,8 +393,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:unused)
|
||||
{
|
||||
if ([self performAccessibilityAction:@"activate"]) {
|
||||
return YES;
|
||||
}
|
||||
else if (_onAccessibilityTap) {
|
||||
} else if (_onAccessibilityTap) {
|
||||
_onAccessibilityTap(nil);
|
||||
return YES;
|
||||
} else {
|
||||
|
||||
@@ -44,6 +44,22 @@ AccessibilityProps::AccessibilityProps(
|
||||
rawProps,
|
||||
"accessibilityIgnoresInvertColors",
|
||||
sourceProps.accessibilityIgnoresInvertColors)),
|
||||
onAccessibilityTap(convertRawProp(
|
||||
rawProps,
|
||||
"onAccessibilityTap",
|
||||
sourceProps.onAccessibilityTap)),
|
||||
onAccessibilityMagicTap(convertRawProp(
|
||||
rawProps,
|
||||
"onAccessibilityMagicTap",
|
||||
sourceProps.onAccessibilityMagicTap)),
|
||||
onAccessibilityEscape(convertRawProp(
|
||||
rawProps,
|
||||
"onAccessibilityEscape",
|
||||
sourceProps.onAccessibilityEscape)),
|
||||
onAccessibilityAction(convertRawProp(
|
||||
rawProps,
|
||||
"onAccessibilityAction",
|
||||
sourceProps.onAccessibilityAction)),
|
||||
testId(convertRawProp(rawProps, "testId", sourceProps.testId)) {}
|
||||
|
||||
#pragma mark - DebugStringConvertible
|
||||
|
||||
@@ -32,6 +32,11 @@ class AccessibilityProps {
|
||||
bool const accessibilityViewIsModal{false};
|
||||
bool const accessibilityElementsHidden{false};
|
||||
bool const accessibilityIgnoresInvertColors{false};
|
||||
bool const onAccessibilityTap{};
|
||||
bool const onAccessibilityMagicTap{};
|
||||
bool const onAccessibilityEscape{};
|
||||
bool const onAccessibilityAction{};
|
||||
|
||||
std::string const testId{""};
|
||||
|
||||
#pragma mark - DebugStringConvertible
|
||||
|
||||
Reference in New Issue
Block a user