Решение было получить доступ к иерархии доступности окна в 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
детей с новым массивом, в котором элемент мы хотим фокус быть на будет на первом месте.
Это пример для очень простого случая. Но это путь.