首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式关注cocoa中可访问的UI元素

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

Stack Overflow用户
提问于 2012-10-10 17:03:00
回答 1查看 632关注 0票数 0

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-15 22:38:07

解决方案是访问windowDidLoad中的窗口可访问性层次结构,如下所示:

代码语言:javascript
复制
id windowElement =  NSAccessibilityUnignoredDescendant(self.window);
NSArray *windowElements = [windowElement accessibilityAttributeValue:NSAccessibilityChildrenAttribute];

之后,应该在windowElements数组中找到层次结构中应该排在第一位的元素。假设我们找到了它,它的索引是firstElIndex,那么:

代码语言:javascript
复制
    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子属性,我们想要关注的元素将放在第一个位置。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12815675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档