0

我有一个带有按钮的工具栏和一个带有标题框的 NSView。当窗口打开并且旁白打开时,我希望焦点位于标题框上。目前它位于工具栏按钮上,因为它在可访问性层次结构中可能更高。我应该怎么做才能将注意力集中在盒子上,而不是按钮上?

谢谢

4

1 回答 1

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];

最后,我们用新数组覆盖windowElementchildren 属性,我们希望焦点放在其中的元素将位于首位。

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

于 2012-10-15T14:38:06.870 回答