我正在尝试为已经开发的iOS应用添加辅助功能.
如果iPhone设置的辅助功能菜单中的VoiceOver选项打开,并且如果画外音关闭则不显示,我希望它们显示一些UI功能(例如按钮).
有没有办法检查画外音选项是否打开?
我在屏幕上有一堆按钮,这些按钮直观地定位,但不是由VoiceOver按直观顺序读取的.这是因为某些按钮(如向上和向下)位于彼此的上方和下方.然而,画外音似乎开始从左到右,从上到下阅读.
这导致画外音在"向上"之后读取"向上"右侧的按钮,而不是在之后立即读取"向下".
如何强制画外音读取我想要阅读的按钮?我应该提一下,我正在使用画外音上的滑动到循环元素功能.
我的所有按钮都是UIView和UIButton的子类.这是我使用的按钮启动器的示例.忽略像素数 - 我知道这是糟糕的形式,但我现在处于紧张状态:
UIButton* createSpecialButton(CGRect frame,
NSString* imageName,
NSString* activeImageName,
id target,
SEL obClickHandler)
{
UIButton* b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setImage:[GlobalHelper nonCachedImage:imageName ofType:@"png"]
forState:UIControlStateNormal];
[b setImage:[GlobalHelper nonCachedImage:activeImageName ofType:@"png"]
forState:UIControlStateHighlighted];
[b addTarget:target action:obClickHandler forControlEvents:UIControlEventTouchUpInside];
b.frame= frame;
return b;
}
- (UIButton *) createSendButton {
CGFloat yMarker = 295;
UIButton* b = createSpecialButton(CGRectMake(160, yMarker, 70, 45),
@"Share_Btn",
@"Share_Selected_Btn",
self,
@selector(sendAction));
b.accessibilityHint = @"Send it!";
b.accessibilityLabel = @"Stuff for voiceover to be added";
[self.view addSubview:b];
return b;
}
Run Code Online (Sandbox Code Playgroud) iOS语音结束没有正确读出我的公司名称.例如,它读出"狗"而不是"狗"(不是我真正的公司名称,但你明白了)
我们通过告诉应用程序在读取公司名称的所有地方读出"DO G"来解决这个问题.
但是,在应用程序图标上以及应用程序完成启动后,语音翻转都会错误地读取软件包显示名称.
应用程序启动后,有没有办法让我的应用程序读出"DO G"而不是"dog"?我倾向于强迫应用程序在应用程序启动后不读出软件包显示名称,然后手动读出"DO G".
(我假设您不能为应用程序图标设置自定义配音,但是对于知道我能不能的人来说,可以获得奖励积分)
简介:我想复制UIAlertView的可访问性行为,其中背景视图仍然可见,但VoiceOver不与其交互.
细节:我已经为iPhone应用程序实现了辅助功能,但仍然存在一个问题.在某些情况下,我会在所有其他视图上显示一个大视图(部分透明,覆盖大部分原始视图),其中包含标签和关闭按钮.即基本上是自定义弹出/警报视图.问题是,VoiceOver继续显示它下面的视图/控件.
防止VoiceOver隐藏视图的一种方法是将整个自定义视图背景设置为可访问.但是,这并不是我们想要的,因为这个包含视图的用户不应真正与之交互,只有它的子视图(标签/按钮)应该.
我正在使用VoiceOver,并且遇到了问题UICollectionView
.我有一个带有十个按钮的初始屏幕,每个按钮链接到集合视图中的十个单元格之一.集合视图实际上是屏幕的完整大小,每个单元格都包含一个子视图控制器.这一切都可以在VoiceOver关闭时正常工作,但是当它打开时,激活集合中间的一个按钮总是会导致集合视图弹出到其第一个单元格,即使我没有点击第一个按钮.我认为这是因为VoiceOver"焦点"转到它看到的第一个元素(即第一个单元格).
我已尝试使用UIAccessibilityScreenChangedNotification
和使用相同单元格的参数的布局相同,但它没有任何区别,它没有弹出我的必需元素,并且总是弹出到集合中的第一个单元格.
我在这里做错了什么?
我正在添加一个片段,这个被调用viewDidLayoutSubviews
,如果VoiceOver关闭,它可以正常滚动.但是一旦VO开启,它就会中断.
if (self.initialIndexPath) {
[self.collectionView scrollToItemAtIndexPath:self.initialIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, [self.collectionView cellForItemAtIndexPath:self.initialIndexPath]);
}
Run Code Online (Sandbox Code Playgroud)
这对于实际聚焦于单元格非常合适,但VoiceOver部分完全被忽略,通知根本不会将焦点转移到正确的单元格,它始终是第一个单元格中的第一个元素.
还要注意,单元格本身不是accessibilityElements,不应该是,它们实现UIAccessibilityContainer
协议,因此每个单元格的标题标签将是我希望焦点最终的位置.
当我isAccessibilityElement = NO
在包含子视图的视图上设置时isAccessibilityElement = YES
,VoiceOver仍会检测到它们.
我需要关闭整个视图层次结构的可访问性,VoiceOver必须以不同方式处理.如何在不必遍历对象图中的每个项目并弄乱它的设置的情况下实现这一目标?
我在iOS 7中开启VoiceOver时遇到了一些麻烦.我确实UITableViewHeaderFooterView
在里面注册了一个子类的实例,viewDidLoad
但是当我用它去它时-[tableView dequeueReusableHeaderFooterViewWithIdentifier:]
它总是返回nil
对象.
该问题开始出现在iOS 7.0上.它在以前的版本中不存在,如果它在6.0和7.0上没有VoiceOver的情况下运行完美,它肯定能正常工作
我可能只是没有自定义标头,或者在dequeueReusableHeaderFooterViewWithIdentifier:
返回nil 时实例化一个新对象.但我想知道是否存在已知问题.
干杯,
我正在使我的iOS应用程序可访问,我差不多完成了.我的应用程序包含几个自定义屏幕转换,当VoiceOver打开时,它似乎选择要在转换后描述的最左上角元素,或偶尔选择随机元素.UIAccessibilityTraitSummaryElement
看起来很有希望,但据我了解它只适用于应用程序启动时,而不是任意转换后.
似乎没有可访问性特征或属性来指定元素被赋予VoiceOver焦点的首选顺序.有没有办法强制VoiceOver焦点?
我正在尝试使我的iPhone应用程序可访问.部分内容涉及为时间和日期部分生成可访问的VoiceOver标签NSDate
.如何NSDate
以可访问的方式格式化,以便VoiceOver支持的所有语言都能正常工作?
我正在为我的应用添加VoiceOver支持.到目前为止,这么好,但我真的希望能够指定哪个元素是UIAccessibilityScreenChangedNotification之后的第一个元素.我还没有看到这样做的方法.制作一些摘要元素似乎并没有真正做到这一点.我错过了什么吗?
voiceover ×10
ios ×9
iphone ×2
objective-c ×2
cocoa-touch ×1
ios7 ×1
ipad ×1
uitableview ×1
uiview ×1