2012-10-10 1 views
0

У меня есть панель инструментов с кнопкой и NSView с надписью. Когда откроется окно и включен Voice Over, я хочу, чтобы фокус находился в названии. В настоящее время он находится на панели инструментов, потому что он, вероятно, выше в иерархии доступности. Что мне делать, чтобы сосредоточиться на поле, а не на кнопке?сосредоточиться на доступном элементе пользовательского интерфейса в какао программно

Благодаря

ответ

0

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

Это пример для очень простого случая. Но это путь.