使用 ref setAccessibilityFocus 不起作用

2023-12-05

我正在使用ref支柱连同findNodeHandle在一堆组件上以便能够触发AccessibilityInfo.setAccessibilityFocus。然而,它并不总是按预期工作。有时参考是null虽然componentDidMount已执行。

我经常使用setAccessibilityFocus为了聚焦屏幕上出现的新元素的标题,例如在打开模式时。

重要提示:这是 Voiceover/Talkback 功能,因此您需要在设备上激活该功能。

看我的零食:https://snack.expo.io/@insats/example-accessibilityinfo-setaccessibilityfocus-not-working

这是代码示例:

import React, { Component } from 'react';
import {
  View,
  Text,
  findNodeHandle,
  TouchableOpacity,
  AccessibilityInfo,
  StatusBar,
} from 'react-native';

class Sample extends React.Component {
  constructor(props) {
    super(props);
    this.accessibilityRef = null;
  }

  componentDidMount() {
    console.log('componentDidMount');
    this.setAccessibilityFocus();
  }

  setAccessibilityRef(el) {
    console.log('setAccessibilityRef', el);
    this.accessibilityRef = el;
  }

  setAccessibilityFocus() {
    console.log('setAccessibilityFocus', this.accessibilityRef);

    if (this.accessibilityRef) {
      const reactTag = findNodeHandle(this.accessibilityRef);
      AccessibilityInfo.setAccessibilityFocus(reactTag);
    }
  }

  render() {
    console.log('Rendering Sample');

    return (
      <Text ref={this.setAccessibilityRef}>
        This text ought to be read out loud by the screenreader if enabled
      </Text>
    );
  }
}

export default class App extends React.Component {
  state = {
    open: false,
  };

  toggle = () => this.setState({ open: !this.state.open });

  render() {
    return (
      <View style={{ margin: 50 }}>
        <StatusBar hidden />
        <TouchableOpacity
          style={{ backgroundColor: 'blue', padding: 20, marginBottom: 20 }}
          onPress={this.toggle}>
          <Text style={{ color: 'white' }}>
            {this.state.open ? 'Hide text' : 'Show text'}
          </Text>
        </TouchableOpacity>

        {this.state.open && <Sample />}
      </View>
    );
  }
}

我真的不明白是什么导致了这些问题。我发现调用 setAccessibilityFocus 两次可以解决问题。您还可以通过处理回调引用中的所有内容来简化聚焦逻辑。

Example:

export default () => {

    const setInitFocus = (element: React.Component | null) => {
        if (element == null) return;
        const elementId = findNodeHandle(element);
        if (elementId) {
            AccessibilityInfo.setAccessibilityFocus(elementId);
            AccessibilityInfo.setAccessibilityFocus(elementId);
        }
    };

    return (
        <TouchableOpacity
          onPress={() => {}}
          ref={setInitFocus}
        >
            <Text>Blah blah</Text>
        </TouchableOpacity>
    );
};

这是应用了这些更改的小吃:

https://snack.expo.io/@loganlim/example-accessibilityinfo-setaccessibilityfocus-not-working

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ref setAccessibilityFocus 不起作用 的相关文章

  • 在按钮下方显示模式 -React Native

    我们可以在原生 android 中保留一个组件 如某些组件 id 的layout below 中所示 我们如何在 React Native 中做到这一点 假设我有一个模式或警报框 我希望它在单击时显示在特定按钮的正下方 我怎样才能做到这一点
  • 滚动视图上的固定按钮

    我目前正在尝试在屏幕右下角的滚动视图上显示一个按钮 但它不起作用 当我滚动视图时按钮会移动 我尝试先插入按钮 但滚动视图位于其上方 class HomePage extends Component loadUserItems this pr
  • React Native FlatList 具有不同列数的替代行

    i want to have a FlatList which renders a single item on odd rows and 2 items on even rows 是否可以实现这种布局 抱歉 我还没有代码 FlatList
  • Firebase Web 与 iOS 和 Android 版本的 React Native 项目

    我是应用程序开发新手 这让我很困惑 我有一个用react native 创建的项目 我希望它可用于android 和iOS 我看过一些关于如何为 React Native 后端创建 Firebase 数据库的教程 其中一些在构建应用程序时选
  • React Native 模块中的 EADemo 永远不会收到委托方法handleEvent NSStreamEventOpenCompleted?

    我希望我有一个反应本机桥接模块 https facebook github io react native docs native modules ios html 线程 委托或生命周期问题 我不明白这些问题正在阻止接收委托方法调用 我需要
  • react-native-firebase 无法处理通知 click_action 导航到通知屏幕

    我正在使用这个react native firebase和react navigation进行导航 我可以成功地从服务器或控制台推送通知 无论它是在前台还是后台 但我发誓文档不太清楚如何打开通知并导航到通知它所属的屏幕 这些是我的 onMe
  • 如何将变量传递给函数引用?

    在 React Native 中 当你有需要在渲染时运行并且必须传递变量的函数时 大多数人建议应该使用 onPress gt this functionName variable 然而 当处理大型列表和复杂组件时 您必须优化代码 为每个 r
  • 如何在 React Native 中做最后一个子选择器?

    我使用Scrollview 里面有3个视图 我在它们之间留了一个间隙 例如 marginRight 5 但我不希望在最后一个视图中出现这种间隙 这就是为什么我需要这种东西 你能帮助我吗 应用这个你就可以实现你在寻找什么 const styl
  • React Native 输入组件仅接受数值

    在React Native项目中 我有一个来自Native Base的输入组件 我希望这个组件只接受数值0 9并给这个字段默认值 我寻找了关于这个问题的其他问题 我不知道也许那些答案是针对 textInput 组件的 或者不知何故建议对我不
  • React Native:访问静态函数内的组件状态

    我有一个这样定义的组件 export class A extends Component constructor props this state scene 0 static changeScene scene this setState
  • React Native:约束 Animated.Value

    我正在制作一个 React Native 应用程序 场景是这样的 我希望用户能够平移视图 但不完全按照他想要的方式 我想约束视图被拖动时可以移动的距离由用户 我已经阅读了两者的文档PanResponder and AnimatedAPI 多
  • jest快照测试:如何忽略jest测试结果中的部分快照文件

    问题 忽略 snap 文件测试结果的某些部分 这里的问题是 我的测试中有一些组件具有随机值 我并不真正关心测试它们 有什么办法可以忽略我的 X snap 文件的一部分吗 因此 当我将来运行测试时 它不会给我测试失败的结果 现在您还可以使用属
  • React Native Tab 视图的高度始终等于最高选项卡的高度

    介绍 我有一个 FlatList 它在页脚中呈现一个选项卡视图 此选项卡视图允许用户在一个 FlatList 或另一个 FlatList 之间切换 所以 最后这些是同级 FlatList Problem 第一个 FlatList A 的高度
  • 使用 Fetch 发生超时错误 - React Native

    我有一个正在运行的用户登录功能 但是 我想在获取时加入超时错误 有没有办法设置一个 5 秒左右的计时器 这样在这个时间之后就会停止尝试获取 否则 一段时间后我就会出现红屏 提示网络错误 userLogin var value this re
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • KeyboardAvoidingView 适用于 EXPO 但不适用于 APK?

    我买了这个主题 它在 Expo 中运行完美 但是一旦我构建 APK 键盘就会覆盖整个屏幕 并且无法按预期工作 我正在使用 expo 进行测试 效果很好 return
  • 我在 Facebook 上的“access_token”是“不正确的值”

    我正在使用 django rest auth 它是 Django all auth 的 API 扩展 我正在构建一个可以使用 Facebook 令牌注册 登录的移动应用程序 网址 http localhost 8000 rest auth
  • 在辅助功能模式下未检测到手势

    我正在编写一个应用程序 我需要在屏幕顶部放置一个标签 每当用户触摸它 或在其上方滑动手指 时 我需要大声读出标签文本 我尝试了以下方法 首先制作标签的可访问性元素 YES labelInfo setIsAccessibilityElemen
  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • 如何在打字稿中使用react-navigation的withNavigation?

    我正在尝试结合使用react native react navigation 和typescript 来创建一个应用程序 只有两个屏幕 HomeScreen and ConfigScreen 和一个组件 GoToConfigButton 总

随机推荐

  • 如何在 ASP.Net MVC 视图中使用下划线/javascript 模板

    我只是想知道如何在 aspx 视图中使用下划线模板 因为下划线使用的 标记被 aspx 渲染引擎拾取并给我错误 例如 该模板给了我一个错误 因为 aspx 渲染引擎认为我正在尝试将这些东西绑定到模型 Thanks 来自精美手册 templa
  • iOS 上的 iframe 大小与 CSS

    有一个 iframe 它的内容基本上超出了框架的容纳范围 框架的大小基于浏览器屏幕大小 并让溢出滚动 这在除 iOS 之外的所有浏览器上都能完美运行 在 iOS 上 safari 决定调整框架大小以适应内容 不是你所期望的 jsFiddle
  • Azure Key Vault 证书 - 创建基本约束 CA:True

    我想通过 Azure 门户 Azure Key Vault 创建自签名 CA 证书 我不知道如何设置 X509 扩展基本约束 CA True 一些参考链接 https learn microsoft com en us powershell
  • 匹配以前缀开头的子字符串

    我被一些正则表达式困住了 我试图使用正则表达式匹配以给定前缀开头的每个子字符串 在 JavaScript 中 prefix pre regex pre foo bar bar pre bar barfoo replace regex sho
  • 如何从 Android 调用 RESTful Web 服务?

    我使用 Jersey Framework 和 Java 在 Netbean IDE 中编写了一个 REST Web 服务 对于用户需要提供用户名和密码的每个请求 我知道这种身份验证不是最佳实践 使用如下的curl命令 curl u user
  • Mongodb身份验证[重复]

    这个问题在这里已经有答案了 如何通过官方 C 驱动程序使用 mongodb 进行身份验证 除了内部成员之外 我找不到任何用于身份验证的 API 方法 应使用以下连接字符串格式在连接字符串中指定身份验证凭据 mongodb username
  • ChartJS 3 不显示图例

    我正在使用 ChartJS 3 7 即使我通过了options plugins legend display a true 图例不显示 如何让图例显示 看起来较新版本的 ChartJS 要求您注册要使用的各个元素 您需要专门注册图例 imp
  • 使用 Google 登录的 OAuth2 Spring 安全性不起作用

    我在下面的链接中找到了一个关于使用 Spring security 进行第三方登录的非常好的教程 它包含前端和后端代码 https www callicoder com spring boot security oauth2 social
  • 使用多个数据库运行 Laravel 队列

    我有 Laravel 5 项目 这是多租户项目 因此我有一个包含多个数据库的文件夹项目 当我使用php artisan queue listen 它仅适用于当前的数据库设置 我用database队列驱动程序 因此每个租户都有自己的通知表 如
  • 纠正缺少 ASP.Net MVC 控制器的 404 消息

    我有一个 MVC 2 应用程序 它应该始终提供 漂亮 的 404 页面 然而目前我得到了一个低级别的 Net sitename 应用程序中的服务器错误 我有一个基本控制器 它有一个NotFound将呈现漂亮的 404 页面的操作 处理缺失的
  • 如何使用 Selenium 为 Firefox 和 Chrome 禁用推送通知?

    我想在通过 Selenium Webdriver 启动 Firefox 浏览器时禁用通知 我发现这个答案 但它已被弃用 并且在 Firefox 上对我不起作用 但它在 Chrome 上完美工作 我将这种依赖关系用于我的pom xml
  • ORA-22275: 指定的 LOB 定位器无效

    我有一个巨大的 Oracle 函数 用于计算 6 个表中的数据 create or replace FUNCTION STATISTICS FUNCTION NAMEIN IN VARCHAR2 RETURN CLOB AS LAST 60
  • 从标准库中重新定义函数是否违反了单一定义规则?

    include
  • 如何使用razor自定义EditorFor CSS

    我有这门课 public class Contact public int Id get set public string ContaSurname get set public string ContaFirstname get set
  • Xcode 8 为 iOS 10 生成损坏的 NSManagedObject 子类

    我最近将我的 iOS 应用程序项目更新到了 iOS 10 现在我尝试更改应用程序的核心数据模型 但 Xcode 生成的新 NSManagedObject 子类已损坏 我还尝试修复子类手册 但这不起作用 核心数据模型的最低工具版本设置为 Xc
  • 使用 React 定期重新加载 iframe 的最佳方法是什么?

    我正在使用 React 构建一个网页 这意味着我无法直接操作 DOM 我尝试通过更新 url 状态来重新加载 iframe 但这似乎不会重新加载页面 这是我尝试过的状态代码 componentDidMount function setInt
  • 在主选项卡栏控制器之前显示登录视图控制器

    我正在创建一个带有需要登录的标签栏控制器的 iPad 应用程序 因此 在启动时 我想显示一个 LoginViewController 如果登录成功 则显示选项卡栏控制器 这就是我实现初始测试版本的方式 省略了一些典型的标头内容等 AppDe
  • Eclipse 编辑器中当前选定代码的 AST?

    我需要在 Eclipse 的 java 编辑器中获取当前选择的 AST 基本上我想将选定的java代码转换为其他形式 可能是其他语言或XML等 所以我想 我需要获得 AST 来进行选择 目前我能够以简单文本的形式进行选择 对于这样的问题有什
  • 使用OpenGL绘制图像

    如何使用开放的 OpenGL OpenTK 在地图 GMap Net 上绘制视频 图像 来自无人机的视频 我的问题是如何在地图上绘制视频图像 因为视频可以在地图上以不同角度观看 并且图像在地图上应该是梯形而不是四边形 I copied im
  • 使用 ref setAccessibilityFocus 不起作用

    我正在使用ref支柱连同findNodeHandle在一堆组件上以便能够触发AccessibilityInfo setAccessibilityFocus 然而 它并不总是按预期工作 有时参考是null虽然componentDidMount