ボタン付きのツールバーと、タイトル付きのボックス付きの NSView があります。ウィンドウが開いてナレーションがオンになったら、タイトル付きのボックスにフォーカスを合わせたいと思います。おそらくアクセシビリティ階層が高いため、現在はツールバーボタンにあります。ボタンではなくボックスにフォーカスするにはどうすればよいですか?
ありがとう
ボタン付きのツールバーと、タイトル付きのボックス付きの 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 属性を新しい配列でオーバーライドします。ここで、フォーカスしたい要素が最初の場所になります。
これは非常に単純なケースの例です。しかし、これは行く方法です。