2015-11-17 26 views
0

我有一個UITableView顯示項目列表,其子類爲UITableViewCell。在該單元格,我有UILabel S和子視圖像這樣一個層次結構:如何使iOS VoiceOver讀取視圖和子視圖作爲一個整體

UITableViewCell subclass 
- UILabel a 
- UILabel b 
- UILabel c 
- UIView subclass 1 
    - UILabel 1a 
    - UILabel 1b 
- UIView subclass 2 
    - UILabel 2a 
    - UILabel 2b 

我想VoiceOver會讀在這裏提出的順序所有標籤。我在這裏應該注意到,在視覺上,UIView子類中的標籤是相反的順序(例如,UILabel 1b位於UILabel 1a之上)。

某些標籤需要將'accessibilityLabel'屬性設置爲某個自定義字符串。一旦知道文本,就可以在UITableViewCell的配置中完成,無論是直接標記還是子視圖。我也將shouldGroupAccessibilityChildren屬性設置爲YES。

現在,我的行爲是:VoiceOver讀取頂層UILabel(a,b & c在該示例中)。然後,如果我滑動以獲取下一個元素,它將讀取UIView子類1,然後是2等。讀取這些子類時,讀取順序無誤(UILabel 1a,然後1b等)。

我可以做到這一點嗎?或者用戶絕對需要刷卡?

+0

不是100%清楚,但你看着使用'accessibilityElements',或者禁用包含標籤的可訪問性並在容器上設置標籤? – Wain

+0

現在,用戶必須滑動3次才能聽到一個單元格的所有信息(一個用於頂層標籤,一個用於每個「UIView」子類)。我希望所有的信息都能在第一次滑動時說出來。在我的測試中,設置'accessibilityElements'使得VoiceOver一次只能說一個信息(因此用戶在我的例子中必須滑動7次)。我希望這可以增加問題的清晰度! – invalidArgument

回答

3

我想你追求的是什麼:

  1. 設置isAccessibilityElement = true上的UITableViewCell
  2. 設置accessibilityLabel到任何你想要的UITableViewCell

這將顯示整個UITableViewCell爲單元素添加到VoiceOver(步驟1)(這非常棒,因爲使用VoiceOver進行導航時,此類單元格列表的效率更高,更便於用戶使用),並允許您自定義VoiceOver所說的內容爲細胞(步驟2)。

請注意,在第2步中,您可以更有創意 - 不僅僅是按照所需順序用逗號分隔所有標籤,還要添加一些詞語以使其更加用戶友好(儘管我會建議在這裏稍微保守一些,以避免陷入演講過於「喋喋不休」的境地,特別是當用戶在搜索某些內容時連續快速瀏覽幾個這樣的單元格 - 太瑣碎的標籤會變得令人厭煩)。例如。如果它是一個購物應用程序,而不是「麪包,1美元,有貨」(即只連接3個標籤並用逗號分隔),則可以說「麪包爲1美元,有貨」(Swift中的String(format:)和目標中的[NSString stringWithFormat:] -C在這裏是你的朋友;不要忘記本地化格式字符串)。

當然,如果以後需要在單元格中有一些按鈕,它會變得有點複雜。不過,這是:-)

+0

我在不同的測試中錯過了第一步。我已經根據您的建議定製了需要自定義的字符串,但實際上它有很大的不同! – invalidArgument

+0

我覺得重寫無障礙標籤屬性更好,並收集子視圖的標籤。這樣它就可以對其孩子的動態變化做出適當的反應。 – ChrisCM

+0

你有沒有想出一個通用的方式來收集子視圖的輔助功能標籤?這是一個設計的遞歸任務,並不是很容易以本地化的方式組合在一起。我很高興看到你是如何做到的。 –

-2

另一個問題,還有另外一個地方,在你的子類,重寫方法:您要確切地改變什麼

-(BOOL) isAccessibilityElement { 
    return YES; 
} 
+0

這與self.isAccessibilityElement = YES具有相同的效果。 – ChrisCM

+0

回調更好。 – BollMose

+2

僅此一項,實際上會使子視圖無法訪問。我們必須繼續向單元格本身添加輔助功能標籤,提示,值或其他內容。 (在這種情況下,結合所有子視圖的內容) –

相關問題