Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proofread #6

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions source/Making_Your_iOS_App_Accessible.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

在“无障碍特性与VoiceOver”中我们说过,一个无障碍的界面元素必须准确提供关于它的信息才能被使用。虽然支持无障碍使用并不代表这个元素可以被VoiceOver用户使用,但是这是应用程序无障碍化的第一步。

在“iOS无障碍API与工具”中我们说过,标准的UIKit控件和试图都支持无障碍使用。如果你只使用了标准的UIKit控件,那可能应用本身就已经支持无障碍使用了。详情参见“提供准确和有用的属性信息”。
在“iOS无障碍API与工具”中我们说过,标准的UIKit控件和视图都支持无障碍使用。如果你只使用了标准的UIKit控件,那可能应用本身就已经支持无障碍使用了。详情参见“提供准确和有用的属性信息”。

如果你创建一个自定义视图来展示信息或者和用户进行交互,那你必须确保这些视图支持无障碍使用。无障碍化之后,你需要确认这些视图的确包含用户需要的无障碍信息。(参见“提供准确和有用的属性信息”)。

Expand Down Expand Up @@ -246,21 +246,21 @@ UI无障碍编程接口定义了12个独立的特性,有些是可以组合的

你可以在应用中使用下面的特性来描述元素:

- 按钮
- 链接
- 搜索框
- 键盘按键
- 图片
- 播放音乐
- 选择
- 总觉元素
- 频繁更新
- 不可用
- 空
- 按钮(Button)
- 链接(Link)
- 搜索框(Search Field)
- 键盘按键(Keyboard Key)
- 图片(Image)
- 播放音乐(Plays Sound)
- 选中(Selected)
- 总觉元素(Summary Element)
- 频繁更新(Updates Frequently)
- 不可用(Not Enabled)
- 空(None)

通常来说,控件类型特性可以和描述行为特性组合。举例来说,你可以组合“按钮”特性和“播放音乐”特性来描述一个自定义控件,它是一个按钮,点击的时候可以播放音乐。

大多数情况下你可以认为控件类型特性是互斥的。也就是说,你不应该使用多余一个类型特性来描述应用中的元素,应该选择最合适的那个特性。然后,如果你的元素有额外的行为,可以用类型特性组合一个行为特性。
大多数情况下你可以认为控件类型特性是互斥的。也就是说,你不应该使用多于一个类型特性来描述应用中的元素,应该选择最合适的那个特性。然后,如果你的元素有额外的行为,可以用类型特性组合一个行为特性。

举例来说,假设用户在iPhone的Safari中点击一个链接会显示一个图片,那你应该组合“图片”和“链接”特性来描述这个元素。另一个例子是点击键盘按键的时候会修改另一个键盘按键。你可以组合“键盘按键”和“选择”特性来描述这个元素。

Expand Down Expand Up @@ -357,7 +357,7 @@ iOS SDK 3.0自带一个Interface Builder,其中包含应用无障碍性相关

## 让表格视图支持无障碍使用

如果你的应用中展示了一个表格,它的每个单元格中包含非文字(或者不只是文字)的内容,那你可以通过一些方法让它更好地支持无障碍使用。同理,如果你的表格视图中每行展示的信息许多,那可以把这些信息聚合到标签中。
如果你的应用中展示了一个表格视图,它的每个单元格中包含非文字(或者不只是文字)的内容,那你可以通过一些方法让它更好地支持无障碍使用。同理,如果你的表格视图中每行展示的信息许多,那可以把这些信息聚合到标签中。

> 注意:如果你的单元格包含任何标准的表格视图元素,比如信息展示指示、细节展示指示或者删除控件,那你不需要额外的工作。然而如果你的单元格中包含其他类型的控件比如选择器或者滑块,那你需要让这些元素都支持无障碍使用。

Expand Down Expand Up @@ -405,6 +405,7 @@ iOS SDK 3.0自带一个Interface Builder,其中包含应用无障碍性相关

下面的代码展示了如何处理动态状态的改变以及如何在屏幕布局发生改变的时候发送通知。代码中的UIView子类的行为类似一个自定义键盘按键。按键的无障碍标签会根据实例的内容进行改变,并且会根据shift键是否按下进行改变。按键也会根据实例内容和是否被选中返回不同的无障碍特性。注意,下面的代码假设会有许多方法查询键盘的状态:

```
@implementation BigKey

- (NSString *)accessibilityLabel
Expand All @@ -415,7 +416,7 @@ iOS SDK 3.0自带一个Interface Builder,其中包含应用无障碍性相关

if ( [self isLetterKey] )

{
{

if ( [self isShifted] )

Expand Down
34 changes: 17 additions & 17 deletions source/Understanding_Accessibility_on_iOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ VoiceOver 是苹果公司创新的读屏技术,通过这个技术,用户无

一个无障碍的界面元素必须准确提供关于它的信息才能被使用。这些信息包括它在屏幕的位置、名称、行为、值和类型。这正是VoiceOver播报给用户的信息。iOS SDK包含了编程接口和工具,来帮你确保程序中的用户界面元素是无障碍且好用的(更多信息,请查看“iOS无障碍API与工具”(第7页))。

# 为什么写没有障碍的应用
# 为什么写无障碍应用

你应该让你你的iPhone应用能被VoiceOver的用户们无障碍的使用,因为:

Expand All @@ -41,37 +41,37 @@ iOS SDK也提供工具来帮你编写无障碍应用:

此外,你可以使用VoiceOver本身来测试应用的无障碍功能。想学习如何用VoiceOver来测试你的应用,请看“用VoiceOver在你的设备上测试无障碍信息”。

#UI无障碍编程接口
#UIAccessibility编程接口

UI无障碍编程接口包含两个非正式协议,一个类,一个函数,还有一些常量。
UIAccessibility编程接口包含两个非正式协议,一个类,一个函数,还有一些常量。

- UIAccessibility非正式协议。实现UIAccessibility协议的对象可以报告无障碍状态(即他们是否是无障碍的)并且提供关于他们的描述性信息。UIAccessibility协议默认由标准UIKit控件和视图实现
- UIAccessibilityContainer非正式协议。此协议通过子类UIView来使它所包含的部分或者全部对象是无障碍的分离元素,当非UIView子类的对象被UIView视图包含时,这些元素不会自动变成无障碍元素,此时UIAccessibilityContainer协议就非常有用。
- UIAccessibilityElement类。定义了一个对象是否能通过UIAccessibilityContainer协议返回。你可以创建UIAccessibilityElement实例来代表无法自动变为无障碍的元素,例如一个没有继承自UIView的对象,或者一个不存在的对象。
- UIAccessibilityConstants.h头文件。此头文件定义了用来描述某些特征的常量。这些常量即可展示的无障碍元素,还有可被应用发布的通知。
- UIAccessibility非正式协议。实现UIAccessibility协议的对象可以报告无障碍状态(即他们是否是无障碍的)并且提供关于他们的描述性信息。标准UIKit控件和视图默认实现UIAccessibility协议
- UIAccessibilityContainer非正式协议。该协议允许UIView的子类使它所包含的部分或者全部对象成为无障碍的分离元素,当非UIView子类的对象被UIView视图包含时,这些元素不会自动变成无障碍元素,此时UIAccessibilityContainer协议就非常有用。
- UIAccessibilityElement类。该类定义了一个可以通过UIAccessibilityContainer协议返回的对象。你可以创建UIAccessibilityElement实例来表示无法自动变为无障碍的元素,例如一个没有继承自UIView的对象,或者一个不存在的对象。
- UIAccessibilityConstants.h头文件。此头文件定义了用来描述特征的常量。这些常量即可展示的无障碍元素,还有可被应用发布的通知。

#无障碍属性

用来描述无障碍用户界面元素的无障碍属性构成了UI Accessibility API的核心。当用户访问或操作控件和视图时,VoiceOver会告知用户无障碍属性的相关信息。

因为无障碍属性封装了区分不同控件和视图的信息,所以无障碍属性也是你最有可能用到的编程接口的组件。就标准UIKit控件和视图来说,确保应用中默认的属性信息准确可能就够了。就自定义的控件和视图来说,或许要添加大部分的属性信息。

UI Accessibility 编程接口定义了如下属性。
UIAccessibility 编程接口定义了如下属性。

- **标签**。一个简短的本地化词或短语,此短语简洁地描述控件或者视图,但是不能识别元素类型。例如“添加”、“播放”。
- **特征**。一个或多个独立特征的组合。每个特征描述一个元素状态、行为、使用中的某一方面。例如当元素的行为如同被选中键盘上的按键,这个元素就有了Keyboard Key和Selected的组合特征。
- **提示**。一个简短的本地化短语,描述发生在元素上动作的结果。例如“添加标题”或者“打开购物列表”。
- **框架**。元素在屏幕上坐标的框架。由CGRect结构体提供,详细说明了元素的屏幕位置和大小。
- **值**。不是由标签定义的元素时的当前值。例如,一个幻灯片的标签可以是”速度”,但是它当前的值是“50%”。
- **Label - 标签**。一个简短的本地化词或短语,此短语简洁地描述控件或者视图,但是不能识别元素类型。例如“添加”、“播放”。
- **Traits - 特征**。一个或多个独立特征的组合。每个特征描述一个元素状态、行为、使用中的某一方面。例如当元素的行为如同被选中键盘上的按键,这个元素就有了Keyboard Key和Selected的组合特征。
- **Hint - 提示**。一个简短的本地化短语,描述发生在元素上动作的结果。例如“添加标题”或者“打开购物列表”。
- **Frame - 框架**。元素在屏幕上坐标的框架。由CGRect结构体提供,详细说明了元素的屏幕位置和大小。
- **Value - 值**。元素的当前值,当元素的值不是由标签表示时使用。例如,一个幻灯片的标签可以是”速度”,但是它当前的值是“50%”。

无论由你指定还是默认情况,无障碍元素需有无障碍属性值。无障碍元素都要有框架和标签属性。因为无障碍元素必须能够报告它在用户界面上的位置,所以框架属性是强制的。(注意一个由UIView继承的对象默认包含了框架属性值)。因为标签属性包含了VoiceOver播报的无障碍元素的名称和描述,所以它也是强制的。
无障碍元素为无障碍属性提供容器,其可以为你指定或默认。无障碍元素都要有frame和label属性。因为无障碍元素必须能够报告它在用户界面上的位置,所以frame属性是强制的。(注意一个由UIView继承的对象默认包含了frame属性值)。因为label属性包含了VoiceOver播报的无障碍元素的名称和描述,所以它也是强制的。

当提示和特征属性不适用时,就无需这些属性。例如不能触发动作的元素不需提示属性。
当hint和traits属性不适用时,就无需这些属性。例如不能触发动作的元素不需提示属性。

仅当元素的内容是可改变并且永不被标签描述时,一个无障碍元素才需要提供给值属性提供内容。例如,一个文本域包含了一个可能有Email标签的Email地址,但是它的内容取决于用户的输入,通常格式为”username@address。“图1-1显示了VoiceOver可以提供了一些信息。
仅当元素的内容是可改变并且不总能被label描述时,一个无障碍元素才需要提供给value性提供内容。例如,一个包含邮件地址的文本框可能有“Email address”的标签,但是它的内容取决于用户的输入,通常格式为”username@address。“图1-1显示了VoiceOver可以提供了一些信息。

**图 1-1** VoiceOver可以读出由无障碍元素提供的信息。

![alt text](/path/img.jpg “图 1-1”)

VoiceOver用户靠听标签和提示来使用应用。因此,确保应用中的每一个无障碍元素提供准确全面的描述是极其重要的。标准UIKit控件和视图的默认值信息经常是准确的,但是你应该检查一下确保无误。对于自定义控件和视图,你可能不得不自己提供部分或者全部信息。关于如何去提供这些信息的指导,请看”打造好用的标签和提示“(第16页)。
VoiceOver用户靠听标签和提示来使用应用。因此,确保应用中的每一个无障碍元素提供准确全面的描述是极其重要的。标准UIKit控件和视图的默认值信息经常是准确的,但是你应该检查一下确保无误。对于自定义控件和视图,你可能必须自己提供部分或者全部信息。关于如何去提供这些信息的指导,请看”打造好用的标签和提示“(第16页)。