2011-08-08 42 views
9

我正在使我的iPhone應用程序可訪問。 VoiceOver令人印象深刻。當用戶使用VoiceOver時,會自動讀取屏幕上的項目,並允許用戶雙擊屏幕上的任意位置以選擇該項目。不過,我希望VoiceOver以特定順序讀取項目,但始終以UINavigationBar項目(包括後退按鈕)開頭。我不希望這些項目而不是被讀取,我只想從一個特定的項目開始。是否有VoiceOver等效的「firstResponder」?以編程方式確定UIView項目應由VoiceOver讀取的順序

回答

0

在某些情況下,在一個項目上設置UIAccessibilityTraitSummaryElement可以做到這一點。 (我的比賽顯得過於動態此幫助很大。)

+0

或者可能不是 - 我可能會誤解UIAccessibilityTraitSummaryElement,它可能僅僅是屏幕輸入時所說的內容。這與重點項目不一樣。 –

6

有一個名爲UIAccessibilityContainer由NSObject的實施方案。它可以讓您通過以下三種方法來定製容器行爲:

  • accessibilityElementCount
  • accessibilityElementAtIndex:
  • indexOfAccessibilityElement:

如果你有,你想控制的無障礙順序的主視圖元素,你只需要實現這三個方法並返回合適的視圖/索引。還有一件事是容器視圖本身不能作爲輔助元素,所以你應該覆蓋isAccessibilityElement:並返回NO;

- (BOOL)isAccessibilityElement { 
    return NO; 
} 

示例實現

我建議你要麼在你希望它們出現或使用tag財產,如果你不使用它的任何訂單的所有意見的數組其他。該協議的實施變得非常簡單。

數組元素

我假設你有一個數組稱爲accessibleElements存儲在正確的順序元素。

- (NSInteger)accessibilityElementCount { 
    return self.accessibleElements.count; 
} 

- (id)accessibilityElementAtIndex:(NSInteger)index { 
    return self.accessibleElements[index]; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    return [self.accessibleElements indexOfObject:element]; 
} 

標籤元素

我假設你的子視圖是從0開始連續標記達子視圖的數量。

- (NSInteger)accessibilityElementCount { 
    return self.subviews.count; 
} 

- (id)accessibilityElementAtIndex:(NSInteger)index { 
    // Not that self should have a tag<0 or tag>count otherwise it will 
    // return itself for that tag instead of the element you want it to. 
    return [self viewWithTag:index]; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    return ((UIView *)element).tag; 
} 
相關問題