我有一个带按钮的工具栏和一个带标题框的NSView。当窗口打开并且Voice Over打开时,我希望焦点在标题框上。目前它在工具栏按钮上,因为它可能在可访问性层次结构中更高。我应该怎么做才能把焦点放在框上,而不是按钮上?
谢谢
发布于 2012-10-15 22:38:07
解决方案是访问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子属性,我们想要关注的元素将放在第一个位置。
这是一个非常简单的例子。但这是要走的路。
https://stackoverflow.com/questions/12815675
复制相似问题