label→value(可选)→traits→hint 读取顺序
NSAccessibilityAnnouncementKey
//组成一个Announcement 这个Announcement的内容就是string 而NSAccessibilityAnnouncementKey作为key就表示这个string是一个Announcement 整个data可以看作useInfo
NSDictionary * data = [NSDictionary dictionaryWithObject: string for key : NSAccessibilityAnnouncementKey];
NSAccessibilityPostNotificationWithUserInfo([[NSApplication shareApplication] keyWindow],NSAccessibilityAnnouncementRequestedNotification,data);
目前已知想要读出来就需要app是active的 然后window需要是keyWindow 然后NSAccessibilityPostNotificationWithUserInfo的第一个参数必须是firstResponder对象
NSAccessibilityPriorityKey
优先级,表示这个string被读取的优先级
NSDictionary *announcementInfo = @{NSAccessibilityAnnouncementKey : string,
NSAccessibilityPriorityKey : @(NSAccessibilityPriorityHigh)};
NSAccessilityPriorityLevel
NSAccessibilityPriorityHigh
NSAccessibilityPriorityMedium
NSAccessibilityPriorityLow
NSAccessibilityNotificationName
里面有一堆Notification 主要通过调用NSAccessibilityPostNotification发送Notification给assistive app 告诉他哪些东西发生了改变
正常来说这些信息都是会被自动发送的
NSAccessibilityAnnouncementRequestedNotification
表示发送的这个notification里面含有AnnouncementRequested的
custom controls
如果要自定义一些自己的element 一般是继承 NSView, NSWindow, NSCell, and NSDrawer,这些element里面已经写了一些关于NSAccessibility protocol 可以直接用,如果不继承这些那就要继承NSAccessibilityElement
accessibility操作
VO键:中/英 或者 control + option
VO + Right/Left
tab能选中的都是能接受键盘消息的view 因为可以成为firstResponder和处理key event 的view通常会进入key view loop of a window 而key-view loop允许用户通过tab/shit + tab来在可以进入key-view loop 的view之间进行选择,而想让一个view进入key-view loop最常用的是在Interface builder中connecting a view to another view’s “nextKeyView” outlet.
关于accessibility里面的firstResponder 和focuse
accessibility focuse的就是黑框框 框住的 一般没有特殊设置是在window显示的时候找到firstResponder来focuse
如果window不设置firstResponder 则是从左到右着第一个能firstResponder的来focuse
但是如果你设置了firstResponder 并且你设置的init这个并不接受firstResponder
那么他就会从左上角开始找第一个可以focuse的 图中是第一个textFile 但是如果textFile放到后面去了 那就是 我是一个label
next key view/key view loop
会有一个key view loop 循环 主要是从window的firstResponder开始 然后此时按下tab 就会focus当前view属性里的next key view 进行一个循环 记住 一定要设置window的firstResponder 如果不设置 你自行设置的next key view会不启用 并且你设置的next key view也只局限于acceptFirstResponder 如果这个view不能接受 则会被跳过
但是可以通过override这个不能成为firstResponder的view的 acceptFirstResponder{ return YES; };方法 就可以focuse了
并且如果有NSView发生变化(消失或者新增)都需要手动调用recalculateKeyViewLoop来重新计算key view loop
voiceOver能聚焦到的
一定是可访问性的东西