我正在尝试为已经开发的iOS应用添加辅助功能.
如果iPhone设置的辅助功能菜单中的VoiceOver选项打开,并且如果画外音关闭则不显示,我希望它们显示一些UI功能(例如按钮).
有没有办法检查画外音选项是否打开?
我一直在浏览我们的代码库并在所有按钮和文本字段上设置accessibilityIdentifier属性,以便我可以使用UIAutomation访问它们.在这样做时,我遇到了一些已经存在的代码.
[_goodButton setAccessibilityLabel:@"off"];
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于这两种方法之间差异的文档.看起来他们做同样的事情.有人知道吗?我觉得这个标签也被设置为"关闭".
我试图确定在发布a UIAccessibilityLayoutChangedNotification
和a 时确切地发生了什么UIAccessibilityScreenChangedNotification
.从我所看到的,我可以在任何地方互换使用它们,没有任何不同的事情发生.
Apple文档只是说LayoutChanged
当(例如)一个元素被隐藏或显示时使用,并ScreenChanged
在整个屏幕发生变化时使用,但我对他们提供这些信息时所做的事情感兴趣,以及我应该看到的不同之处当使用其中一个时.
任何人都可以清楚地解释两者之间的实施差异吗?
我有动态文本绑定到HTML页面上的ARIA-LABEL.这是一个有角度的2应用程序.我使用的是这样的:aria-label ="{productDetails?.ProductName}}的产品详细信息"
但是我收到一个错误 - 无法绑定到'aria-label',因为它不是'div'的已知属性.
这有什么解决方法吗?
如果用户正在使用屏幕阅读器(例如Microsoft Narrator),并且他们的焦点进入文本框:
他们听到的只是:
编辑文字
同时在无障碍应用中,
辅助功能系统能够获得控件的"可访问名称":
批次分隔符.编辑文字
这通过实现IAccessible接口的窗口工作.它通过发送hWnd WM_GETOBJECT消息来获取窗口的IAccessible实现.应用程序永远不会发送此消息:
由Microsoft Active Accessibility和Microsoft UI Automation发送,以获取有关服务器应用程序中包含的可访问对象的信息.
应用程序从不直接发送此消息.Microsoft Active Accessibility发送此消息以响应对AccessibleObjectFromPoint,AccessibleObjectFromEvent或AccessibleObjectFromWindow的调用.
但是我们可以处理消息,并将IAccessible接口返回给调用者:
case Message.Msg of
WM_GETOBJECT:
begin
if DWORD(Message.LParam) = OBJID_CLIENT then
Message.Result := LResultFromObject(IAccessible, Message.WParam, FAccessible);
end;
end;
Run Code Online (Sandbox Code Playgroud)
在.NET世界中,它们围绕Edit控件的包装器公开了一种使用Control.AccessibleName属性设置TextBox 的可访问名称的方法:
Control.AccessibleName属性
获取或设置辅助功能客户端应用程序使用的控件的名称.
Run Code Online (Sandbox Code Playgroud)public string AccessibleName { get; set; }
我不知道底层的Microsoft Edit控件如何公开辅助功能.除了TCustomActionMenuBar之外,我在VCL中找不到任何对IAccessible的引用.
VCL如何公开辅助功能?
如何设置与TEdit控件关联的可访问名称? …
题:
如何添加自定义VoiceOver辅助功能
Label
或Hint
应用程序图标徽章编号?
例如,当iOS的设置Accessibility > VoiceOver
被打开On
,VoiceOver会朗读项目触及屏幕.对于App Store和Mail图标,将大声朗读以下内容:
App Store图标,VoiceOver说:"App Store.2 可用更新.双击打开."
VoiceOver邮件图标说:"邮件.1条未读邮件.双击打开."
但是,对于我正在研究的项目,VoiceOver读出是通用的,并不完全有用:
我的应用程序图标,VoiceOver说:"我的应用程序.123项新项目.双击打开."
短语"......新项目"太模糊,不准确的,我敢肯定,必须有一种方法使用自定义字符串做出改变这一点,通过设置一个读更好accessibilityLabel
,accessibilityHint
类似什么的.
但究竟如何在Swift代码?
非常感谢.
补充观察:
使用模拟器辅助功能检查器,VoiceOver值显示为Label
- "我的应用程序"和Value
- "123个新项目".在代码中更新了我尝试设置accessibilityValue
自定义 - "123自定义描述".但仍然没有运气,VoiceOver继续阅读"我的应用程序.123 新项目.双击打开."
为什么VoiceOver没有按预期读取自定义徽章值?
码:
以下方法将红色圆形App图标徽章编号添加到我的应用程序图标:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let badgeCount: Int = 123
let application = UIApplication.sharedApplication() …
Run Code Online (Sandbox Code Playgroud) 所以我有一个UICollectionView,其中包含一组使用自定义UILayout显示的UICollectionViewCells.
我已经将UILayout配置为布局所有UICollectionViewCells几乎与它们在ios上的照片应用程序中的布局方式完全相同.
问题是,当打开语音时,用户正在使用滑动遍历UICollectionViewCells,当用户到达页面上的最后一个可见单元格并尝试向前滑动到下一个单元格时,它就会停止.
我知道在UITableView中,单元格将继续向前移动,表格视图将自动向下滚动.
有谁知道如何获得这种行为?
我需要将辅助功能焦点移至屏幕上的某个元素。在 UIKit 中,我可以简单地调用UIAccessibility.post(.screenChanged, element)
.
当我使用 SwiftUI 视图执行此操作时,应用程序崩溃并在控制台中显示以下消息:
This class '__SwiftValue' is not a known serializable element and returning it as an accessibility element may lead to crashes
Run Code Online (Sandbox Code Playgroud)
知道如何将焦点移动到 SwiftUI 屏幕上的某些元素吗?
我终于解决了这个问题并将Xcode更新为7.1.但现在我在调试器中收到所有这些警告.我的应用程序不使用UIWebViews.我使用Parse作为后端,但这是我第一次遇到这些问题.任何人有任何想法如何解决这个问题?非常感谢.谢谢!
UIAccessibility Error adding -[DOMNode _moveRight:withHistory:]
UIAccessibility Error adding -[DOMNode _moveLeft:withHistory:]
UIAccessibility Error adding -[DOMNode _updateSelectionWithTextRange:withAffinityDownstream:]
UIAccessibility Error adding +[DOMNode safeCategoryBaseClass]
UIAccessibility Error adding -[UIWebFormAccessory _accessibilityLoadAccessibilityInformation]
UIAccessibility Error adding -[UIWebFormAccessory initWithFrame:]
UIAccessibility Error adding +[UIWebFormAccessory safeCategoryBaseClass]
UIAccessibility Error adding +[UIWebFormSelectPeripheral safeCategoryBaseClass]
UIAccessibility Error adding +[UIWebFormSelectPeripheral createPeripheralWithDOMHTMLSelectElement:]
UIAccessibility Error adding -[UIWebSelectSinglePicker _accessibilityServesAsFirstElement]
UIAccessibility Error adding +[UIWebSelectSinglePicker safeCategoryBaseClass]
UIAccessibility Error adding -[UIWebSelectMultiplePicker _accessibilityServesAsFirstElement]
UIAccessibility Error adding +[UIWebSelectMultiplePicker safeCategoryBaseClass]
UIAccessibility Error adding -[UIWebPlugInView webPlugInStart]
UIAccessibility Error adding +[UIWebPlugInView safeCategoryBaseClass]
Run Code Online (Sandbox Code Playgroud) 在 iOS 中使用 Voice Over 时,调用UIAccessibility.post(notification:argument:)
来宣布字段错误实际上并不会宣布错误。
我有一个提交按钮,当聚焦按钮时,旁白会如你所愿读取按钮标题。按下按钮时,画外音会再次朗读标题。当提交按钮被按下时,我正在做一些验证,当出现字段错误时,我试图通过调用来宣布它:
if UIAccessibility.isVoiceOverRunning {
UIAccessibility.post(notification: .announcement, argument: "my field error")
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我在调试器的断点处停下来,就会发生通知。当我不在断点处停止时,公告不会发生。
通知发布在主线程上,如果是这样NotificationCenter.default
,我假设它是在发布的同一线程上处理的。我试图将调用分派到主队列,即使它已经在主线程上,但这似乎也不起作用。
我唯一能想到的是在旁白完成阅读提交按钮标题之前发布和观察通知,并且公告通知不会中断当前的旁白。
我真的很感激这方面的任何帮助。
uiaccessibility ×10
ios ×7
voiceover ×3
angular ×1
cocoa-touch ×1
delphi ×1
delphi-xe6 ×1
html ×1
optimization ×1
swift ×1
swiftui ×1
uiaccessibility-notification ×1
wai-aria ×1