以编程方式关注cocoa中可访问的UI元素

以编程方式关注cocoa中可访问的UI元素,cocoa,osx-lion,accessibility,Cocoa,Osx Lion,Accessibility,我有一个带有按钮的工具栏和一个带有标题框的NSView。当窗口打开且画外音打开时,我希望焦点集中在标题框上。目前它位于工具栏按钮上,因为它在可访问性层次结构中可能更高。我应该怎么做才能把焦点放在盒子上,而不是按钮上 感谢解决方案是访问windowDidLoad中的窗口可访问性层次结构,如下所示: id windowElement = NSAccessibilityUnignoredDescendant(self.window); NSArray *windowElements = [windo

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


感谢

解决方案是访问
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属性,我们希望关注的元素将位于第一位

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