我们有一个UILabel
隐藏的登录屏幕,最初用于表示用户退出应用程序时的消息.
当在iOS中打开VoiceOver并且用户尝试从应用程序注销时,理想情况下应该读出注销消息标签.相反,它会读出登录屏幕的密码文本字段.
注销按钮的操作具有以下实现代码.
let loginStoryboard = UIStoryboard(name: "Login", bundle: nil)
let loginViewController = loginStoryboard.instantiateInitialViewController() as! LoginViewController
loginViewController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
loginViewController.logOut = true
self.presentViewController(loginViewController, animated: true, completion:nil)
Run Code Online (Sandbox Code Playgroud)
注销指示器设置为显示注销消息标签.
LoginViewController
viewDidLoad
码.
if(!logOut){
self.logOutMsg.hidden = true
}else{
self.logOutMsg.text = NSLocalizedString("LoggedOutMsg", comment: "Logged out message")
self.logOutMsg.hidden = false
}
Run Code Online (Sandbox Code Playgroud)
登录屏幕字段是故事板中启用的辅助功能.
行为不一致:有时会读取注销消息标签,有时会读出密码文本字段.每当VoiceOver读取密码文本字段时,我都会在控制台日志中看到错误.
|error| Could not find <UIWindow: 0x124d13b10; frame = (0 0; 768 1024); gestureRecognizers = <NSArray: 0x174241140>; layer = <UIWindowLayer: 0x1742319c0>> in a list of sorted view [parent: <CaseworkerApp.AppDelegate: 0x124e008e0>] siblings …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个NSMenuItem
我想让它访问的自定义视图。当我不覆盖时accessibilityIsIgnored
(因此返回NSView
默认值YES
),我在 Accessibility Inspector 中看到AXMenuItem
使用自定义视图的菜单项的可访问性层次结构中有一个基本对象,但它缺少菜单项的大部分必需属性例如“标题”:
所需的属性是对于不使用自定义视图菜单项设置。
当我覆盖accessibilityIsIgnored
return 时NO
,这会导致一个额外的辅助功能对象被添加到层次结构中(默认情况下是一个AXUnknown
对象):
由 的覆盖返回的属性值accessibilityAttributeValue:
应用于AXUnknown
下的此对象AXMenuItem
,而不是应用于AXMenuItem
对象本身的所需效果。
如何为菜单项提供缺失的属性值?
我在 iOS 7/8 UIAccessibility 上遇到了很多麻烦。我正在使用的特定用例是我期望的一个非常常见的“保存进度”用例。
编辑: 我注意到我最初的问题并不清楚想要的结果,所以我在这里添加了一个描述:目标是通过 VoiceOver 说出“保存进度”的消息,或者代替正在朗读或朗读之后的 NavigationBar 标题。我不确定在这种情况下可访问性的典型行为是什么,所以也许熟悉 iOS 可访问性的人也可以澄清这一点。
从最简单的解决方案开始,到最复杂的解决方案,我尝试了以下方法。
-(void) showProgressSavedPanel {
... // present the panel toast
NSString * message = NSLocalizedString(@"Your progress has been saved.", @"Progress saved message");
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, message);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用这种方法,当 VoiceOver 自动朗读导航栏标题和后退按钮的标题时,通知很快就会被打断。实际的 VoiceOver 结果类似于“您的进度 - 导航栏标题 - 后退按钮”。
阅读有关 iOS 可访问性的文章,我发现了一个新的 API,它似乎也不起作用。添加了一个直接指向进度保存标签的新 IBOutlet 后,我将上面的代码替换为以下代码:
-(void) showProgressSavedPanel {
... // present the panel toast
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _progressSavedLabel);
}
Run Code Online (Sandbox Code Playgroud)
使用UIAccessibilityScreenChangedNotification
或UIAccessibilityLayoutChangedNotification
有相同的结果:预期的信息没有被说出。无论我做什么,VoiceOver 似乎只想说出导航栏标题。
我想出了一个解决方案,让我很伤心大熊猫,这是一个任意延迟(1.5似乎工作)后使用的第一个解决方案,除了张贴公告通知,导致公告出现后回栏按钮项具有被说。
有谁知道更好的方法?
提前致谢 …
我有一个包含“\xc2\xa324 pm”的 UITextField,但我希望画外音说“\xc2\xa324 每月”。通过设置:
\n\n[textView setAccessibilityLabel:@"\xc2\xa324 per month"];\n
Run Code Online (Sandbox Code Playgroud)\n\nVoiceOver 读出“\xc2\xa324 每月 \xc2\xa324 下午”。
\n\n如何阻止 UITextField 中的消息被读出?
\n我有一个UIImageView
后缘锚定到另一个视图的前缘。
然而,当我在 iPhone 上的辅助功能设置中启用粗体文本时,图像视图的大小会变大 1pt,这使得图像呈现在错误的位置。
这是 UIKit 的错误吗?
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
[self.containerView addSubview:self.imageView];
[self.imageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
[self.imageView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.imageView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
[self.imageView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
// .. create constraints here ...
Run Code Online (Sandbox Code Playgroud)
我有一个页面,其中不止一个页面在用户输入时发生变化。如果我对所有这些都使用 role="alert" ,则 Jaws/Narrator 只会读出其中之一。这是预期的吗?解决方法是什么?
通常,VoiceOver
正确读取加载的网页内容,WKWebView
并且可以读取按钮和链接。
但是,?当我说WKWebView
对UITableViewCell
,并显示在UITableVIew
,VoiceOver
无法识别它。
根据苹果的tableview文档,为了让每个内容都分别UITableViewCell
被识别VoiceOver
,需要将isAccessibilityElement
cell设置为false isAccessibilityElement
,view设置为true。
但如果isAccesibilityElement
ofWKWebView
设置为 true,视图本身是聚焦的,我们无法识别内部网页内容。
此外,VoiceOver
在加载 Web 内容后第一次启用时,它执行了可以识别 Web 内容的奇怪行为。
怀疑是VoiceOver
内容识别时序的问题,我试了一下运行
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)
Run Code Online (Sandbox Code Playgroud)
或者
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)
Run Code Online (Sandbox Code Playgroud)
加载网页内容后,却没有得到好的结果。
是否有处理内容的一个好办法wkwebview
上tableView
到VoiceOver
?
我想将可访问性焦点设置为导航栏的标题项。
默认情况下,焦点是从左上角设置的,这意味着后退按钮将处于焦点上。
我希望标题项目成为焦点。
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
navigationController?.navigationBar.items?.last)
Run Code Online (Sandbox Code Playgroud)
VoiceOver 焦点不会超出导航项目。我向右滑动,但焦点被困在导航项的最后一个元素上。可能它应该移动到 ViewController 视图的第一个元素。我设置了accessibilityElements并使每个元素isAccessibilityElement = true。如果我尝试点击 ViewController 的任何元素,则会将焦点困在状态栏上。
我有一个 UITableview,每当我重新加载表视图时,可访问性焦点都会转到随机单元格。我尝试发布如下通知以将焦点移至特定单元格
let indexPath = IndexPath.init(row: 0, section: 0)
let desiredCell = self.myTableView.cellForRow(at:indexPath)
UIAccessibility.post(notification: .layoutChanged, argument:desiredCell)
Run Code Online (Sandbox Code Playgroud)
我观察到以下问题: 发布通知将焦点移至所需行后,焦点转到随机行,然后转到所需行。
大家有没有遇到过同样的情况,或者有什么想法,请与我分享,
提前致谢。
uiaccessibility ×10
ios ×6
objective-c ×4
swift ×4
voiceover ×3
cocoa ×1
html ×1
nsmenuitem ×1
uitableview ×1
xcode ×1