Объекты доступности и иерархия доступности
В основе OS X доступность является объектом доступности. Этот объект представляет доступный для пользователя элемент в Вашем приложении, таком как кнопка или пункт меню, независимо от среды разработки приложения, от которой зависит Ваше приложение. Вспомогательное приложение использует объект доступности сделать элемент пользовательского интерфейса, который оно представляет доступный для пользователей и управлять взаимодействием пользователя с тем элементом.
Эта статья описывает объект доступности, поскольку это реализовано Набором Приложения. Это описывает компоненты объектов доступности и иерархии, в которой они располагаются. Это также описывает методы, на которые могут ответить объекты доступности.
Атрибуты
Объекты доступности описаны рядом атрибутов. Эти атрибуты включают тип объекта, места объекта в иерархии доступности (описанный в Иерархии Доступности), ее значение, ее размер и позиция на экране дисплея, и т.д. В Какао атрибуты идентифицируются NSString
значения, такой как NSAccessibilityWindowAttribute
и NSAccessibilityZoomButtonAttribute
(см. Неофициальную Ссылку на протокол NSAccessibility для полного списка названий атрибута).
Каждый атрибут имеет значение, предоставляющее вспомогательному приложению информацию об элементе пользовательского интерфейса, который представляет объект доступности. Например, значение ролевого атрибута кнопки NSAccessibilityButtonRole
и значение его включенного атрибута могло бы быть YES
(если кнопка включена). Кроме того, много объектов доступности включают атрибут значения (NSAccessibilityValueAttribute
) это содержит текущую стоимость объекта пользовательского интерфейса. Например, значение объекта текстового поля является содержанием текстового поля, и значение установленного переключателя true
.
Значения атрибута всегда обрабатываются как объекты. Они должны быть любой объектами, соответствующими NSAccessibility
протокол или один из следующих типов объектов:
NSArray
NSAttributedString
NSData
NSDate
NSDictionary
NSNumber
(для булевской переменной, целого числа и значений с плавающей точкой)NSString
NSURL
NSValue
(для точки, размера, прямоугольника и значений диапазона)
NSValue
объекты должны быть созданы с надлежащими удобными методами, такой как valueWithPoint:
, быть должным образом распознанным и переданным к вспомогательному приложению. Значение атрибута может также быть nil
, несмотря на то, что это не заставляет “Значение” ошибка быть замеченным вспомогательным приложением.
Вспомогательное приложение должно знать который атрибуты оказанная доступность поддержка объектов быть в состоянии точно представлять объект пользовательского интерфейса пользователю. Это вызвано тем, что вспомогательное приложение использует значения поддерживаемых атрибутов, чтобы управлять объектом и дать информацию о пользователе об этом. Объект доступности возвращает список своих поддерживаемых атрибутов в accessibilityAttributeNames
метод. Когда вспомогательное приложение должно получить значение определенного атрибута, объект доступности возвращает его в accessibilityAttributeValue:
метод.
Некоторые атрибуты только для чтения, таковы как роль, но другие, таковы как значение ползунка, может быть изменен вспомогательным приложением. Атрибут, значение которого является модифицируемым вспомогательным приложением, вызывают устанавливаемый. Модификация значений атрибута является одним способом, которым вспомогательное приложение может управлять пользовательским интерфейсом другого приложения (другой путь посредством действий, описанных в Действиях).
Объект доступности указывает, что значение определенного атрибута может быть изменено вспомогательным приложением путем возврата YES
от accessibilityIsAttributeSettable:
метод. Вспомогательное приложение изменяет значение определенного атрибута с помощью accessibilitySetValue:forAttribute:
метод.
В NSAccessibility.h
, Какао определяет большое количество констант для стандартных атрибутов, многие из которых относятся только к нескольким классам. Например, существует большой набор атрибутов, которые являются для использования с объектами тем текстом дескриптора. Несколько атрибутов, однако, требуются для каждого объекта доступности. Если необходимо создать объект доступности представлять элемент настроенного пользовательского интерфейса, Вы должны в минимуме реализовывать следующие атрибуты. (См., Делают Пользовательские Классы и Подклассы Доступными для подробных данных.)
NSAccessibilityRoleAttribute
. Этот требуемый атрибут идентифицирует тип объекта доступности. Какао определяет большое количество ролевых значений, такой какNSAccessibilityApplicationRole
,NSAccessibilityRadioButtonRole
, иNSAccessibilityScrollAreaRole
. Значение ролевого атрибута в программируемых идентификационных целях только (вспомогательное приложение никогда не будет представлять значение ролевого атрибута пользователю), и поэтому не должен быть локализован. ПосмотритеNSAccessibility
описание протокола для списка всех ролей определяется в Какао.NSAccessibilityRoleDescriptionAttribute
. Этот атрибут содержит локализованную строку, описывающую роль объекта. Это предназначается, чтобы быть читаемым (или speakable к) пользователь. Например, ролевой атрибут строки описания для кнопки должен быть «кнопкой». Это позволяет вспомогательному приложению точно идентифицировать тип объекта для пользователя.NSAccessibilityTitleAttribute
. Этот атрибут требуется для любого объекта пользовательского интерфейса, выводящего на экран заголовок видимого текста как часть его визуального интерфейса. Например, дисплей Кнопки отмены включает заголовок «Отмена». Поэтому объект доступности, представляющий эту кнопку, должен включать атрибут заголовка со строковым значениемcancel
. Это позволяет вспомогательному приложению точно передать цель объекта пользователю. Если, например, Кнопка отмены не включает атрибут заголовка, вспомогательное приложение может быть в состоянии описать его пользователю только как «кнопка».Обратите внимание на то, что атрибут заголовка не предназначается для содержания статического текста, служащего заголовком для элемента пользовательского интерфейса, но это не часть его визуального интерфейса. Для объектов, сопровождающихся отдельными заголовками статического текста и описаниями, используйте
NSAccessibilityTitleUIElementAttribute
иNSAccessibilityServesAsTitleForUIElementsAttribute
атрибуты (описанный в Предоставляют Дескриптивную информацию для Всех Элементов).NSAccessibilityDescriptionAttribute
. Доступный в версии 10.4 OS X и позже, этот атрибут содержит локализованную строку, описывающую цель объекта. Все объекты пользовательского интерфейса, не выводящие на экран текстовый заголовок (и поэтому не включают атрибут заголовка) должны включать атрибут описания, чтобы позволить вспомогательному приложению описывать цель объекта пользователю. Например, кнопка OK не должна включать атрибут описания, потому что это уже включает атрибут заголовка со строковым значениемok
. Кнопка печати, выводящая на экран значок принтера вместо заголовка «Печать», однако, должна включать атрибут описания со строковым значением, такой какprint
. Если такая кнопка не будет включать атрибут описания, то вспомогательное приложение будет в состоянии описать его пользователю только как «кнопка».NSAccessibilityParentAttribute
. Этот атрибут требуется для всех объектов доступности кроме объекта прикладного уровня. Значение этого атрибута является объектом доступности, содержащим этого. Например, значение родительского атрибута в объекте доступности ячейки кнопки является объектом доступности, представляющим объект управления кнопки. Часто, родитель объекта доступности является наследователем объекта пользовательского интерфейса, который он представляет. Иногда, однако, наследователь объекта не мог бы быть интересен вспомогательному приложению. Примером этого является NSButton, содержащий NSButtonCell. В таких случаях неинтересный родительский объект может быть отмечен, как «проигнорировано», который делает его невидимым для вспомогательного приложения. Для получения дополнительной информации о том, как иерархия доступности может отличаться от иерархии наследования, посмотрите Иерархию Доступности.При возврате родителя объекта уважайте проигнорированное состояние объектов при помощи
NSAccessibilityUnignoredAncestor
функционируйте для возврата первого непроигнорированного родителя для объекта. Для получения дополнительной информации об этой функции посмотрите Управление Иерархией Доступности.NSAccessibilityChildrenAttribute
. Этот дополнительный атрибут идентифицирует объекты доступности, содержавшие в этом. Например, значение дочернего атрибута в объекте доступности управления содержит ячейки управления. Точно так же дочерние элементы приписывают в объекте доступности, представление представления содержит подпредставления представления. Как с родительским атрибутом, не все дочерние элементы объекта интересны вспомогательному приложению, и некоторые могут быть отмечены, как «проигнорировано» в иерархии доступности. Для получения дополнительной информации об этом посмотрите Иерархию Доступности.При возврате дочерних элементов объекта уважайте проигнорированное состояние объектов при помощи
NSAccessibilityUnignoredChildren
функционируйте для возврата непроигнорированных дочерних элементов для объекта. Для получения дополнительной информации об этой функции посмотрите Управление Иерархией Доступности.NSAccessibilitySizeAttribute
. Этот требуемый атрибут содержит объект NSValue предоставление размера объекта пользовательского интерфейса в пикселях. Этот атрибут требуется так, чтобы вспомогательные приложения могли сделать такие вещи как дисплей фокусирующее кольцо вокруг объекта пользовательского интерфейса.NSAccessibilityHelpAttribute
. Этот дополнительный атрибут является локализованной строкой, описывающей цель объекта. Строка должна быть короткой фразой, предоставляющей подсказку пользователю для того, как обработать объект. Для объектов NSView реализация по умолчанию возвращает тег справки представления (подсказка) строка.
Для получения дополнительной информации о требуемых и дополнительных атрибутах, связанных с каждой ролью, см. приложение “Роли и Связанные Атрибуты” в Обзоре Доступности для OS X.
Действия
Объектам доступности можно было связать действия с ними. Эти действия являются универсальными действиями, пользователь может взять объект пользовательского интерфейса, который представляет объект доступности. Это означает, что действия доступности не являются зависящими от контекста. Поскольку вспомогательное приложение управляет пользовательским интерфейсом Вашего приложения, действия обычно соответствуют единственному щелчку мышью или нажатию клавиши. Например, Кнопка печати поддерживает универсальное действие нажатия, не зависящее от контекста действие печати. Действия идентифицируются значениями NSString, такой как NSAccessibilityPressAction
.
Объект доступности возвращает список своих поддерживаемых действий в accessibilityActionNames
метод. Когда вспомогательное приложение должно заставить Ваше приложение выполнять определенное действие, это отправляет accessibilityPerformAction:
сообщение. Когда Ваше приложение получает accessibilityPerformAction:
сообщение, это выполняет требуемое действие таким же образом, это делает, когда запрос прибывает непосредственно из мыши или клавиатуры.
В NSAccessibility.h
, Какао определяет небольшое количество констант для стандартных действий. Если Вы создаете (или расширяетесь), объект доступности, необходимо ограничить себя этими действиями. Если Вы не сделаете, то вспомогательное приложение, вероятно, будет неспособно обработать Ваше пользовательское действие.
NSAccessibilityConfirmAction
. Это действие моделирует нажатие клавиши Enter, такой как в текстовом поле.NSAccessibilityDecrementAction
. Это действие постепенно уменьшает значение объекта, такого как ползунок.NSAccessibilityIncrementAction
. Это действие постепенно увеличивает значение объекта, такого как ползунок.NSAccessibilityPickAction
. Это действие выбирает пункт меню.NSAccessibilityPressAction
. Это действие моделирует единственный щелчок мышью, такой как на кнопке.NSAccessibilityCancelAction
. Это действие моделирует нажатие Кнопки отмены.NSAccessibilityRaiseAction
. Это действие делает окно приложения frontmost (позади, возможно, любое плавание или модальные системой окна, в настоящее время выводящиеся на экран).NSAccessibilityDeleteAction
. Моделирует удалить действие для элементов, которые должны иначе быть перетащены месту назначения (такому как Мусор), чтобы быть удаленными.NSAccessibilityShowMenuAction
. Это действие открывает контекстное меню в элементе, представленном этим объектом доступности. (Это действие может также использоваться для отображения меню, предварительно связанного с элементом, таким как меню, выводящее на экран, когда пользователь медленно нажимает кнопку «Назад» Safari's.)
Посмотрите Действия Поддержки для подробных данных о реализации действия.
Иерархия доступности
Объекты доступности располагаются в иерархию, представляющую пользовательский интерфейс Вашего приложения. Объект доступности прикладного уровня (представление объекта NSApplication) наверху иерархии, и ее дочерние элементы первого порядка являются объектами доступности, представляющими окна главного приложения и строку меню. Вспомогательное приложение может пересечь иерархию с помощью различных атрибутов, прежде всего NSAccessibilityParentAttribute
и NSAccessibilityChildrenAttribute
(см. Атрибуты для получения дополнительной информации об определенных атрибутах).
Вспомогательные приложения могут также переместиться через иерархию с помощью атрибутов, приводящих к объектам доступности, не связанным включением. Если, например, отображения приложения список документов в одном представлении и содержании выбранного документа в другом представлении, приложение может использовать NSAccessibilityLinkedUIElementsAttribute
атрибут для соединения этих двух представлений. Используя значение этого атрибута, вспомогательное приложение может позволить пользователю переходить легко между связанными представлениями. Другие атрибуты, такой как NSAccessibilityMenuBarAttribute
и NSAccessibilityTopLevelUIElementAttribute
, обеспечьте прямой, удобный доступ к конкретным объектам в пользовательском интерфейсе приложения.
Иерархия доступности встроена в иерархию объектов, уже существующую в приложении Какао. Например, объект NSApplication верхнего уровня управляет набором окон. Вспомогательные доступы к приложениям эти окна путем выяснения у объекта доступности представление NSApplication возражают для значения NSAccessibilityWindowsAttribute
атрибут. (Окна могут также быть получены путем запроса значения дочернего атрибута, но строка меню включена в это значение.) Каждое из этих окон содержит иерархию представления в чем, вид сверху окна, довольное представление, содержит любое число подпредставлений, каждое из которых может содержать еще больше подпредставлений и т.д. Эта иерархия может быть пересечена путем выяснения значение каждого объекта NSAccessibilityChildrenAttribute
. У основания иерархии объекты, с которыми пользователь обычно взаимодействует, такие как кнопки и текстовые поля.
В некоторых случаях, однако, объект, необходимый в иерархии объектов Какао, не интересен вспомогательному приложению. Например, представление верхнего уровня в окне (довольное представление) является просто контейнером для других представлений, которые являются реальными объектами, составляющими пользовательский интерфейс. Поскольку пользователь никогда не взаимодействует непосредственно с довольным само представление, эта подробность реализации скрыта от вспомогательного приложения путем маркировки объекта доступности представление представления, как «проигнорировано». Поэтому, когда окно просят относительно его дочерних элементов, вместо того, чтобы возвратить его довольный представление, окно должно возвратить дочерние элементы представления содержания.
Объекты NSControl также часто скрыты. NSControl обычно имеет непосредственное отношение к объекту NSCell, реализующему большинство поведения управления. В этих случаях проигнорирован объект NSControl, и иерархия доступности спрыгивает с представления, содержащего управление к ячейке управления. Средства управления, которые могут представлять больше чем одну ячейку, однако, такую как NSMatrix или NSTableView, не проигнорированы.
Важно отметить, что проигнорированные объекты доступности не вырезаются от иерархии доступности приложения; скорее о них не сообщают вспомогательному приложению. Проигнорированный объект должен остаться в его месте в иерархии доступности обеспечивать мост между своими окружающими объектами и реализовывать функции и атрибуты, необходимые его дочерним элементам.
Рисунок 1 сравнивает иерархию представления для окна и иерархию доступности для того же окна. Довольное представление и кнопочное управление (NSButton) проигнорированы объекты, которые находятся в иерархии представления, но не иерархии доступности. Иерархия доступности пропускает довольное представление и переходит непосредственно к его дочерним элементам, и кнопка заменяется ячейкой кнопки (NSButtonCell).
Объекты указывают, что должны быть проигнорированы путем реализации accessibilityIsIgnored
метод и возврат YES
. Фактически, возвраты реализации NSView по умолчанию YES
. Для создания себя видимыми к вспомогательному приложению, поэтому, подклассы NSView должны переопределить accessibilityIsIgnored
метод и возврат NO
. Для получения дополнительной информации при работе с проигнорированными объектами, посмотрите Управление Иерархией Доступности.