2015-06-11 56 views
2

我正在嘗試使UIPickerView的我的Voice Over可訪問,我注意到UIPickerViewAccessibilityDelegate協議是相當不完整的。它只允許您爲pickerView組件指定標籤和提示,而不是組件中的行。 (它也有一個bug,它的pickerView:accessibilityLabelForComponent:方法在它的pickerView參數中沒有傳遞一個UIPickerView *,它是一個UIAccessibilityPickerComponent)!如何爲UIPickerView行設置Voice Over輔助功能標籤?

所以我想知道現在有沒有什麼辦法可以設置我的選取器的行的自定義輔助功能標籤,還是隻能讀出顯示在屏幕上的實際選取器行值?

我試圖做一個選擇器視圖,顯示它的時間,小時,分鐘,秒。我無法讓datePicker來做到這一點。但是,如果每行都可以用「3小時」而不是3來表示,那麼它會很好。如果必須將可見標籤設置爲我想要的聲音來朗讀,那麼我不確定標籤將適合顯示這個,即。

15小時35分鐘20秒

是相當多的,以適應在英國的屏幕上,不知道有多大,它會局部時因此理想的成長能夠爲每一行設置標籤.. 。

乾杯

回答

3

如果要實現的UIPickerViewDelegatepickerView:viewForRow:forComponent:reusingView:方法來填充UIPickerView組件的方式,你可以通過設置在UIView你是從該方法返回accessibilityLabel實現定製的無障礙標籤的每一行。

請注意,我沒有成功,在做閱讀的VoiceOver的情況下定製的無障礙標籤,我使用pickerView:titleForRow:forComponent:填充UIPickerView - 即使設置在返回NSStringaccessibilityLabel(它不工作在一些其他情況下,像UITableView的設置輔助標籤索引)不會改變VoiceOver的發音。因此,如果要定製VoiceOver(或Switch Control)爲UIPickerView行所說的內容,似乎唯一的方法是使用pickerView:viewForRow:forComponent:reusingView:而不是其他2個候選方法中的任何一個來填充UIPickerView行。

但是,我仍然建議您重新考慮您所做的事是否可取。當VoiceOver(或切換控制)用戶到達組件時,例如,與accessibilityLabel「分鐘」,他們知道他們在幾分鐘內,因爲VoiceOver讀取例如。 「分鐘19」等調整值時,不需要再聽到「20分鐘」,「21分鐘」; 「20」和「21」就足夠了,用戶可以記住上下文(例如「現在我在分鐘,所以讓我們調整到45」)。

+1

感謝您的信息。我想我現在被卡住了,因爲我無法指定組件的輔助功能標籤,因爲我描述了pickerView:accessibilityLabelForComponent:方法沒有在它的pickerView參數中傳遞一個UIPickerView *,而是一個UIAccessibilityPickerComponent,而不是私有API並有一個選擇器屬性是正確的選擇器。 問題是我在這個ViewController中有多個選擇器,所以我需要能夠確定我正在設置組件輔助功能標籤的選擇器。我記錄了一個有關它的雷達錯誤。 – jimbobuk

+0

儘管多謝了,但你還是多說了一些重複。如果我可以修復組件標籤,那麼也許我可以刪除它。現在我已經將完整的可見標籤設置爲我想要的。 – jimbobuk

+0

我想再說一遍,你可以從'pickerView:viewForRow:forComponent:reusingView:'''text''將會返回'UIView'(例如'UILabel')。 「20」,其「accessibilityLabel」將是「20分鐘」。不需要將'UILabel'的文本也設置爲「20分鐘」(或者從'pickerView:titleForRow:forComponent:'返回「20分鐘」)。對不起,如果我誤解你的評論,情況並非如此。 –

相關問題