2016-07-20 21 views
8

在iPhone天氣應用程序中,當使用VoiceOver時,我注意到第一次點擊某個部分時,它會宣佈該部分。如何讓VoiceOver在iOS中發佈章節標籤?

例如,在iOS 9中,首次點擊任何項目時,中間條會首先發布「小時預測」,然後繼續描述您點擊的元素。點擊任何其他地帶不會公佈「小時預測」。

點擊底部表上的任何內容,會在繼續描述您點擊的元素之前公佈「每日預測」。點擊此表中的其他任何內容都不會以「每日預測」作爲前綴。

是否有一個簡單的API來命名您的應用程序的部分?或者您是否必須通過跟蹤配音光標並動態更改標籤來手動執行此操作? (這是否甚至可以工作?你可以在點擊事件之後但在它被讀取之前更改accessibilityBLabel)

+0

你可以使用一個UIGestureRecognizer以檢測爲準的UIView你想觸摸,使用一個布爾值,表明你已宣佈一些天氣,並使用AVSpeechUtterance宣佈你想要什麼。 – Jonathan

+0

@thealienisreal我來到這裏與完全相同的問題。你有沒有碰運氣? – djibouti33

+0

@ djibouti33沒有運氣。一般無障礙實施的答案很多,但沒有解決這一特定情況的答案。 – thealienisreal

回答

0

是否有一個簡單的API來命名應用的各個部分?

看起來最合適的參考是Apple's Accessibility Programming Guide

及其API,Apple's UIAccessibility Documentation

設置shouldGroupAccessibilityChildren屬性似乎是實現您的目標的最佳方式。鏈接的API把它描述爲,表示

一個布爾值是否應的VoiceOver組一起屬於接收機的孩子,而不管它們在屏幕上的位置的元素。在垂直列中項目的父視圖上將此屬性的值設置爲YES,會導致VoiceOver尊重應用的分組並正確導航它們。

事情要記住:

  1. 是目標元素的輔助功能元素?(你可以檢查使用isAccessibilityElement財產;標準的UIKit控件和視圖實現默認UIAccessibility協議)
    • 如果是這樣,你只需要設置它的輔助功能屬性
    • 如果沒有,你需要改變它的價值,view.isAccessibilityElement = true
  2. accessibilityLabel屬性標識
  3. accessibilityHint屬性描述由元件觸發該操作的元件
  4. 您可以設置無障礙情節板中的
  5. 屬性或者,你可以設置你的視圖子類實現的輔助功能屬性
+0

'shouldGroupAccessibilityChildren'屬性隻影響VoiceOver光標瀏覽元素的順序,但此布爾值不提供命名節的方法。您描述了標註元素的方式,但我正在尋找一種方法,在點擊任何元素之前公佈元素名稱,然後在節內首次宣佈元素本身獲得焦點,就像天氣應用一樣。 – thealienisreal

+0

您是否將包含視圖的'isAccessibilityElement'屬性設置爲'true'?如果你這樣做,並將其與子元素分組,那可能會解決它。 –

+0

Apple's Weather應用程序可能會像您提到的那樣運行,因爲它包含容器視圖中的自定義元素。 「另一方面,容器視圖包含用戶可以與其交互的其他元素,例如,在UIView的自定義子類中,它執行自己的幾何圖形繪製,這些形狀表示用戶可以與之交互的元素,以及與容器視圖不同,容器視圖中的這些單獨元素不能自動訪問(因爲它們不是UIView的子類)。「此方法可能會自動公佈該部分。 –

2

有兩種方法我想:

  1. 子類化的UITableViewCell並覆蓋accessibilityLabel。

    - (NSString *) accessibilityLabel 
    { 
        NSString* voiceOverString; 
        // append section title on voiceOverString and then the elements value 
        return voiceOverString; 
    } 
    
  2. 請參閱從Apple docs此鏈接:來自的cellForRowAtIndexPath 您可以setAccessibilityLabel細胞。這個例子是針對天氣應用程序本身的。

相關問題