我是Mac和iOS编程的新手,最近决定真正认真地开发两种平台的应用程序.我采取的第一步是注册Mac和iOS开发人员程序,下载Xcode并学习一本关于Objective-C的书.我花了6周的时间熟悉Objective-C,它的语法,概念和Foundation框架,并且纯粹是为了这些目的开发命令行应用程序.
现在,下一步似乎是Cocoa和开发提供图形用户界面的应用程序,我现在正在研究.现在,这是我遇到的一个问题:由于我完全失明,我无法直观地看到屏幕.因此,我使用VoiceOver,OS X和iOS内置的屏幕阅读器.也许有些开发者在某些时候听说过VoiceOver,因为Apple已经指定了与VoiceOver有关的各种可访问性指南.在这方面,非常感谢所有遵守这些指导方针的人,非常感谢您的努力!:-)
对于Xcode,它实际上与VoiceOver(VO)非常有效.添加新的UI元素也没什么大不了的,我可以从库中复制它们并将它们粘贴到视图中.但是,我不能拖累它们并以吸引人的方式设置它们,或者至少我还没有找到任何方法来实现它,因为我刚刚开始!
现在,我真的想知道是否有任何"文本"方式来安排UI元素.我知道检查员有很多种选择,但是我不确定他们是否会让我说手动更改UI元素的坐标.此外,我已经阅读了有助于创建一致布局的新约束,但此时我并不熟悉如何使用它们或者它们在我的情况下是否有用.
此外,我确实认识到,生成一个100%吸引有目标的最终用户的界面对我来说可能是不可能的,因为我很难决定颜色选择或设计徽标.因此,我可能需要雇用某人来做这些事情.但是,如果我可以粗略地指定布局,那对我来说已经很有帮助了!
感谢您的任何想法/建议:-)
知更鸟
带有垂直滚动内容的HTML固定页脚(我希望标准的东西,溢出:自动等).
当VoiceOver焦点击中可见视图底部的元素时,通过右滑动VoiceOver手势垂直滚动元素时,VoiceOver焦点会正确地移动元素但滚动条仅滚动元素高度的一半,因此VoiceOver焦点移动到可见光下方区域.
编辑更新的片段,在前一个容器高度小于50%,为了清晰而更新,以显示高度无关紧要.
提前致谢.
.scrollContainer {
position: absolute;
overflow: auto;
top: 0;
width: 100%;
bottom: 100px;
}
.rightData {
float: right;
padding-right: 10px;
}
.stepData {
padding: 0px;
list-style-type: none;
margin-top: 0;
margin-bottom: 0;
}
.stepData > li {
height: 42px;
border-top: 1px solid black;
padding: 12px 20px;
font-size: 1.25em;
}
#footer {
position: absolute;
height: 100px;
width: 100%;
bottom: 0;
background-color: cyan;
}
Run Code Online (Sandbox Code Playgroud)
<div style="height:500px;">
<div id="container" class="scrollContainer">
<ul class="stepData" style="padding:0px;">
<li role="button" aria-label="date">06/01<span class="rightData" aria-label="steps">1001</span></li>
<li role="button" …
Run Code Online (Sandbox Code Playgroud)我正在开发一个单页面应用程序(SPA),我们正在使用HTML 5模拟多页面应用程序history.pushState
.它在视觉上看起来很好,但在iOS Voiceover中表现不正常.(我认为它不适用于任何屏幕阅读器,但是我首先尝试使用画外音.)
这是我想要实现的行为的一个例子.这是两个普通的网页:
1.html
<!DOCTYPE html><html>
<body>This is page 1. <a href=2.html>Click here for page 2.</a></body>
</html>
Run Code Online (Sandbox Code Playgroud)
2.html
<!DOCTYPE html><html>
<body>This is page 2. <a href=1.html>Click here for page 1.</a></body>
</html>
Run Code Online (Sandbox Code Playgroud)
很好,很简单.画外音如下所示:
网页已加载.这是第1页.
[向右滑动]单击此处查看第2页.链接.
[双击]加载网页.这是第2页.
[向右滑动]单击此处查看第1页.访问过.链接.
[双击]加载网页.这是第1页.
这里它再次作为单页面应用程序,使用历史记录操作来模拟实际的页面加载.
spa1.html
<!DOCTYPE html><html>
<body>This is page 1.
<a href='spa2.html'>Click here for page 2.</a></body>
<script src="switchPage.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)
spa2.html
<!DOCTYPE html><html>
<body>This is page 2.
<a href='spa1.html'>Click here for page 1.</a></body>
<script src="switchPage.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)
switchPage.js
console.log("load");
attachHandler();
function attachHandler() {
document.querySelector('a').onclick …
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
,我假设它是在发布的同一线程上处理的。我试图将调用分派到主队列,即使它已经在主线程上,但这似乎也不起作用。
我唯一能想到的是在旁白完成阅读提交按钮标题之前发布和观察通知,并且公告通知不会中断当前的旁白。
我真的很感激这方面的任何帮助。
我有一个UITableView
我建立的loadView
.我所做的一件事loadView
就是创建一个UIView
充当表头并填充其中的东西UIImageView
.图像视图包含一个风格化标题的图像,因此我想为VoiceOver用户添加一个辅助功能标签.但是,我无法让VoiceOver"聚焦"在图像上以便读取标签,并且Accessibility Inspector不会响应在模拟器中单击图像.我的(缩写)代码如下:
... in -loadView ...
// Make header view
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(...)];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[self titleImage]];
titleImageView.accessibilityLabel = [self accessibilityLabelForTitleImage];
[headerView addSubview:titleImageView];
// Make table view
self.tableView = [[UITableView alloc] initWithFrame:CGRect(...) style:UITableViewStylePlain];
self.tableView.tableHeaderView = headerView;
... code continues ...
Run Code Online (Sandbox Code Playgroud)
我已经介入gdb并accessibilityLabelForTitleImage
返回一个字符串.po [titleImageView accessibilityLabel]
打印出正确的字符串,但我仍然无法专注于图像视图.请注意,视图本身会出现并作出适当的响应.
我错过了什么吗?有没有办法强制VoiceOver确认图像视图?
当选择UITableViewCell时,语音通过宣布"已选择 ",我不希望语音结束说"已选择".我怎样才能实现这一目标?
我尝试过的事情没有成功:
accessibilityHint
和accessibilityLabel
selectionStyle = UITableViewCellSelectionStyleNone
accessibilityTraits = UIAccessibilityTraitButton
题:
我正在尝试实现iOS应用程序的可访问性,并且已经涉及到一些细微差别和怪癖.
例如:我的应用程序中有一个标签,上面写着:"这是一个直播活动." 在这种情况下,生活的定义是"当前正在发生的事情",并且在宣布它时应该与"五"押韵.
然而,画外音理解和读取"生活"这个词,如:"活着,让我们死",并用"Give"错误地发音押韵.
同样,我遇到的另一个问题是在"添加选择"的上下文中使用"ADD"一词.在其背景下该词的含义是"在篮子里添加一些东西",但被称为"ADD(注意缺陷障碍)"
在启用应用程序的可访问性时,是否有一种编程方式为文字提供上下文?
我正在努力使用<input type="text" role="spinbutton" />
HTML/JavaScript 中的元素来实现具有递增/递减行为的可访问输入。但似乎 VoiceOver 有自定义(假?)输入事件用于递增/递减,它们以意想不到的方式改变输入的值。
我如何确保使用辅助技术浏览页面的用户在尝试与我的小部件交互时不会从 VoiceOver 获得糟糕的指导?
例如,使用像这样的超级精简代码:
function logIt(...args) {
document.getElementById('output').appendChild(
document.createTextNode(`${args.join(', ')}\n`)
);
}
document.getElementById("myInput").addEventListener('input', (e) => {
debugger;
logIt(e.type, e.data, String(e));
e.target.setAttribute('aria-valuenow', e.target.value);
}, false);
document.getElementById("myInput").addEventListener('keydown', (e) => {
logIt(e.type, e.data, String(e));
}, false);
Run Code Online (Sandbox Code Playgroud)
<input
id="myInput"
type="text"
role="spinbutton"
autocomplete="off"
defaultValue="1"
aria-valuenow="1"
aria-valuemin="0"
aria-valuemax="100"
/>
</div>
<pre id="output"></pre>
Run Code Online (Sandbox Code Playgroud)
... VoiceOver 会将输入描述为“步进器”,并给出有关如何使用键盘递增/递减的说明。但是使用这些键盘命令会导致一些奇怪的数学运算,如下面的屏幕截图所示:
还可以看到(从屏幕盖的“记录”),当用户类型的输入,一个InputEvent
触发与event.type
为input
- ,但用于递增/递减将VoiceOver键盘命令时,基型Event
被触发以event.type
重新设置到input
。
这对于我的role="spinbutton"
. jQuery UI 微调器在使用 VoiceOver 键盘命令递增/递减时表现不佳: …
我正在使用我的iPhone应用程序.VoiceOver令人印象深刻.当用户使用VoiceOver时,它会自动读取屏幕上的项目,并允许用户双击屏幕上的任意位置以选择该项目.但是,我希望VoiceOver以特定顺序读取项目,但它始终以UINavigationBar项目(包括后退按钮)开头.我不希望这些项目根本不被阅读,我只想从一个特定的项目开始.是否有VoiceOver相当于"firstResponder"?
我在将配音光标移动到viewDidAppear上的特定元素时遇到问题.我遵循Apple的指导原则,专注于特定元素,在这种情况下是一个消除按钮,但光标最终会在其他地方
这是我的代码:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
self.dismissButton);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,想法,绝对会受到赞赏!非常感谢.
voiceover ×10
ios ×7
html ×2
javascript ×2
objective-c ×2
wai-aria ×2
cocoa-touch ×1
interface ×1
iphone ×1
ipod-touch ×1
pushstate ×1
uitableview ×1
xcode ×1