以编程方式专注于可可中的可访问UI元素

时间:2012-10-10 09:03:00

标签: cocoa osx-lion accessibility

我有一个带按钮的工具栏和带有标题框的NSView。当窗口打开并且Voice Over打开时,我希望焦点位于标题框上。目前它位于工具栏按钮上,因为它在可访问性层次结构中可能更高。我该怎么做才能把重点放在方框上,而不是按钮?

由于

1 个答案:

答案 0 :(得分:0)

解决方案是访问windowDidLoad中的窗口辅助功能层次结构,如下所示:

id windowElement =  NSAccessibilityUnignoredDescendant(self.window);
NSArray *windowElements = [windowElement accessibilityAttributeValue:NSAccessibilityChildrenAttribute];

之后,应该在windowElements数组中找到应该是层次结构中第一个的元素。假设我们发现它及其索引是firstElIndex然后:

    NSMutableArray *mutArray = [NSMutableArray arrayWithArray:windowElements];
        id firstElement = [[mutArray objectAtIndex:firstElIndex] retain];

        [mutArray removeObject:firstElement];
        [mutArray insertObject:firstElement atIndex:0];

        [windowElement accessibilitySetOverrideValue:mutArray forAttribute:NSAccessibilityChildrenAttribute];
        [windowElement accessibilitySetOverrideValue:mutArray forAttribute:NSAccessibilityVisibleChildrenAttribute];
        [windowElement accessibilitySetOverrideValue:mutArray forAttribute:NSAccessibilitySelectedChildrenAttribute];
        [firstElement release];

最后,我们用新数组覆盖windowElement children属性,我们希望焦点所在的元素位于第一位。

这是一个非常简单案例的例子。但这是要走的路。