2

我有兩個關於可訪問性和UICollectionViews的問題,我希望得到一些專家的幫助。另一個問題,關於部分標題,可以找到here。我創建了一個sample project展示了這兩個問題。UICollectionViewFlowLayout Voice Over使用流佈局讀取項目順序

我有一個UICollectionView使用UICollectionViewFlowLayout其中包含可變高度的項目。 UIFlowLayout將每行的元素垂直居中。不幸的是,當啓用Voice Over時,它似乎傾向於垂直放置較高的元素,導致它不按順序讀取項目。

您可以拉此example project,運行它,啓用語音播放,並通過項掃描查看問題。它會創建具有隨機高度的單元格,因此它很可能會按順序讀取單元格。

有沒有一種方法可以使集合視圖按順序前進?我覺得這是唯一有道理的方法,但我找不到一種強制執行此行爲的方法。設置集合視圖來分組子視圖似乎沒有幫助。任何幫助將不勝感激。

+1

您可能能夠使用此方法:http://stackoverflow.com/a/13133633/308315 – iwasrobbed 2013-04-29 23:01:01

+0

見接下來的文章中 http://stackoverflow.com/questions/13132805/accessibility-for-ios-配音 - 讀取訂單問題 – Ponja 2013-08-19 18:32:39

+0

我擁有良好的權威性,此問題已在iOS7中修復。 – 2013-08-19 22:04:05

回答

4

Accessibility for iOS, VoiceOver read order issue

初步實現此爲您的例子是三個標籤放置在一個透明的UIView子類來作爲你的標籤的容器的最快方式。這個子類必須正確設置才能讓VoiceOver知道如何解釋它。如果您的部署目標是iOS6,那麼您可以簡單回答此子類中的「應該組可訪問性子項」問題。

-(BOOL)shouldGroupAccessibilityChildren{ 
    return YES; 
} 

對於低於iOS6的會比較複雜,除了你的UIView容器子類將只包含這是無障礙的元素UILabels。你可以這樣實現:

-(BOOL)isAccessibilityElement{ 
    return NO; 
    } 
    -(NSInteger)accessibilityElementCount{ 
     return self.subviews.count; 
    } 
    -(id)accessibilityElementAtIndex:(NSInteger)index{ 
     return [self.subviews objectAtIndex:index]; 
    } 
    -(NSInteger)indexOfAccessibilityElement:(id)element{ 
     return [self.subviews indexOfObject:element]; 
    } 

我測試過這個示例代碼,它的確是你要找的,如果你需要澄清請添加評論。總是樂於幫助使事情更容易獲得。