https://developer.apple.com/documentation/appkit/nsaccessibilityprotocol
"The complete list of properties and methods for accessible elements."
접근 가능한 요소를 위한 속성 및 메소드의 완전한 리스트입니다.
protocol NSAccessibilityProtocol
접근성이 있는 형태가 되려면 앱은 UI 및 기능에 대한 정보를 보조 앱에 제공해야 합니다. 앱과 보조 앱이 상호작용하는 세 가지 방법이 있습니다.
NSAccessibilityProtocol
은 뷰 혹은 컨트롤에 대한 정보를 제공하는 몇 가지 속성을 정의합니다. 표준 AppKit
뷰 혹은 컨트롤의 서브클래스로 작업하는 경우 원하는 속성을 설정하거나 getter와 setter에 오버라이드 할 수 있습니다. 기본값으로 getter만 오버라이드하는 것은 보조 앱에게 속성에 대해서 읽기 전용 접근임을 알려줍니다. setter만 오버라이드하는 것은 보조앱에게 속성에 대해서 쓰기 접근을 갖고 있음을 알려줍니다.NSAccessibilityProtocol
은 버튼 입력, 마우스 클릭, 뷰 혹은 컨트롤 선택을 시뮬레이션 하는 몇 가지 메소드를 정의합니다. 이 메소드를 구현함으로써 보조 앱에 뷰 혹은 컨트롤을 드라이브할 수 있는 기능을 줄 수 있습니다.NSAccessibility.Notification
은 post(element:notification:)
메소드를 사용해서 보낼 수 있는 몇 가지 노티피케이션을 정의합니다. role-specific 프로토콜은 이 노티피케이션을 포함하지 않지만, 표준 AppKit
컨트롤은 이미 표준 사용 패턴에 대한 적합한 메시지를 보냅니다. 커스텀 컨트롤을 생성하거나 표준적이지 않은 방법으로 표준 컨트롤을 사용할 때에만 고유한 노티피케이션을 보낼 필요가 있습니다.만약 표준 AppKit
UI 요소를 사용하고 있는 경우 대부분의 작업은 스스로 완료됩니다. AppKit
뷰와 컨트롤은 기본값으로 NSAccessibilityProtocol
프로토콜을 채택합니다. NSView
, NSWindow
, NSCell
, NsDrawer
는 이 프로토콜에서 모든 속성 및 메소드에 대한 기본값 구현을 제공합니다. 몇 가지 경우 앱을 더 잘 나타내도록, 추가적 컨텍스트를 제공할 수 있도록, 혹은 앱을 통한 사용자의 흐름을 수정할 수 있도록 이러한 기본값을 수정할 필요가 있을 수 있습니다.
커스텀 뷰 혹은 컨트롤 서브클래스를 사용하는 경우 정보를 갖는 적합한 속성, 액션 메소드, 노티피케이션 추가가 필요합니다. 이 경우 NSAccessibilityProtocol
대신 role-specific 프로토콜을 채택함으로써 추가할 수 있습니다. Custom Controls를 살펴보시기 바랍니다.
Custom Controls
https://developer.apple.com/documentation/appkit/accessibility_for_appkit/custom_controls
https://velog.io/@panther222128/Custom-Controls
만약 NSView
를 상속받지 않았거나 혹은 접근성 사용 가능한 AppKit
클래스가 아닌 다른 것으로부터의 커스텀 UI 요소를 사용하는 경우 NSAccessibilityElement
클래스를 사용하시기 바랍니다.
UI 커스텀 서브클래스 생성 없이, 보조 앱이 UI 요소와 상호작용하는 방법을 조정할 수 있습니다. 만약 UI 요소가 NSView
로부터 상속받았거나 접근성이 가능한 다른 AppKit
클래스로부터 상속받은 경우 아래 방법으로 커스터마이징 할 수 있습니다.
NSAccessibilityProtocol
프로토콜에 있는 setter 메소드를 사용해 접근성 값을 설정하는 것입니다.NSAccessibilityProtocol
에 있는 속성 혹은 메소드를 커스텀 구현으로 오버라이드하는 것입니다.getter 메소드를 오버라이드 하면 시스템은 보조 앱이 getter를 호출하도록 합니다. 이는 동적 속성을 관리할 때 특히 유용합니다. 왜냐하면 변경에 대한 응답에서 속성 업데이트를 시도하는 것 대신 필요한 때에 현재 값을 계산할 수 있기 때문입니다.
setter 메소드를 오버라이드 하면 시스템은 보조 앱이 해당 속성을 읽고 수정할 수 있도록 해줍니다. isAccessibilitySelectorAllowed(_:)
를 오버라이드 해서 어떤 접근자 메소드가 보조 앱을 사용할 것인지를 제어할 수 있습니다. 만약 보조 앱이 셀렉터를 호출할 수 있다면 true
를 반환해야 하고, 반대의 경우 false
를 반환합니다.
보이스오버 사용자가 관련 접근성 요소의 다음 인스턴스를 찾도록 도와주는 context-sensitive 함수입니다.
https://developer.apple.com/documentation/appkit/nsaccessibilitycustomrotor
https://velog.io/@panther222128/NSAccessibilityCustomRotor