Реализация доступности для пользовательских элементов управления
В его самой основной, реализующей доступности для пользовательских элементов управления так же просто как принятие протокола и затем реализация любых отсутствующих методов. Реальная проблема прибывает, когда Вы хотите изменить поведение управления вне того, что предоставлено протоколом или когда Вы работаете со специализированными средствами управления — например, средства управления, не поддерживающиеся представлением.
Принятие специфичного для роли протокола
Первый шаг в реализации доступности должен идентифицировать специфичный для роли протокол что лучшие соответствия намеченное поведение Вашего управления. Например, если Ваше управление - что-то, что инициировало действия, когда пользователь щелкает по нему, оно должно, вероятно, принять NSAccessibilityButton
протокол.
Доступность API обеспечивает 18 специфичных для роли протоколов. Эти протоколы представляют наиболее распространенные типы управления, найденные в приложениях. Для получения дополнительной информации об определенном протоколе, посмотрите что справочная документация протокола.
После выбора надлежащего протокола примите тот протокол. XCode тогда предупреждает Вас о любых отсутствующих методах. Просто реализуйте эти методы, и Ваше управление готово использовать.
Методы в этих протоколах представляют минимум, требуемый действовать согласно указанной роли. Если надлежащее использование Вашего управления близко соответствует роль, это может быть всем, в чем Вы нуждаетесь. Однако можно далее настроить поведение управления и путем реализации дополнительных методов доступности и свойств, и путем отправки уведомлений клиенту доступности.
Настройка роли
NSAccessibility
протокол объявляет все информационные свойства и методы действия, используемые доступностью API. Ваше управление может свободно принять любой из этих методов или свойств. Вы не должны принимать NSAccessibility
протокол — фактически, Вы обычно не должны принимать этот протокол. Клиенты доступности автоматически обнаруживают и используют любой из этих методов, как только они доступны.
В частности специфичные для роли протоколы часто требуют информационного метода получателя свойства, но не его метода установщика. Если Вы просто реализуете метод получателя, клиентам доступности предоставляют доступ только для чтения к данным. Если Вы реализуете и метода get и метод set, клиентам доступности предоставляют доступ для чтения-записи. Это позволяет пользователям изменять значение свойства с помощью клиента доступности.
Для средств управления, хранящих значения, Вы часто хотите реализовать обоих accessibilityValue
и setAccessibilityValue:
методы доступа. Реализация setAccessibilityValue:
позволяет пользователям изменить значение управления через клиент доступности.
Кроме того, если Ваше управление не делает довольно подходящий ни одна из ролей, выберите роль, что большинство близко представляет надлежащее использование Вашего управления, и затем добавьте другие информационные свойства, и методы действия должны были изложить в деталях ее желаемые возможности и способы поведения.
Уведомление клиента доступности
После принятия специфичного для роли протокола предупреждения компилятора XCode приводят Вас посредством процесса реализации требуемых информационных свойств и методов действия. Однако это не помогает с уведомлениями. Средства управления часто должны предупреждать клиенты доступности к изменениям. Например, если значение Вашего управления изменяется, необходимо отправить a NSAccessibilityValueChangedNotification
уведомление.
Эти уведомления не используют стандарт NSNotification
система. Вместо этого эти уведомления отправляются в процесс клиента доступности с помощью доступности API. Для получения дополнительной информации см. Ссылку AXUIElement.h.
Чтобы отправить им уведомление, используйте NSAccessibilityPostNotification
метод. Для полного списка уведомлений см. объявления константы в Неофициальной Ссылке на протокол NSAccessibility. В частности просмотрите уведомления Элемента и Разные уведомления. Удостоверьтесь, что Вы отправляете эти уведомления как надлежащие.
Средства управления без представлений
Предыдущее обсуждение берет на себя то Ваше управление, наследовался от NSView
или одни из стандартных средств управления AppKit. В некоторых случаях, однако, Ваши средства управления могут просто быть визуальными элементами, рисующимися и управляющимися их содержанием представления. Если Вы хотите сделать клиенты доступности, знающие — и способный взаимодействовать с — эти средства управления, необходимо создать пользовательское NSAccessibilityElement
подкласс для представления их.
Для работы должным образом необходимо сделать следующее:
Инстанцируйте Вашего
NSAccessibilityElement
разделите любого на подклассы при помощиaccessibilityElementWithRole:frame:label:parent:
удобный метод или путем установки элементаaccessibilityRole
,accessibilityLabel
иaccessibilityParent
свойства.Любой добавляет
NSAccessibilityElement
разделите на подклассы к его родителюaccessibilityChildren
массив или вызов родительaccessibilityAddChildElement:
удобный метод.Установите Ваш
NSAccessibilityElement
подклассaccessibilityFrameInParentSpace
свойство. В отличие от этогоaccessibilityFrame
, это свойство гарантирует, что Ваше управление перемещается с его суперпредставлением.Примите специфичный для роли протокол, настройте роль и отправьте уведомления так же, как Вы обработали бы любое другое доступное управление.