2017-06-22 53 views
2

在我的應用程序中,我有一個加載異步數據的UITableView:加載視圖控制器時,顯示模態活動微調器並啓動HTTP請求。完成後,我隱藏微調器並在我的桌面視圖上執行reloadData()。我還將response?.count ?? 0作爲行數返回,以確保當數據尚未準備好時它最初清空的列表。VoiceOver和異步UITableView

它的工作原理就像一個魅力,但我有一個與VoiceOver的問題:當打開視圖控制器時,VoiceOver進入表並說「空列表」。當數據加載時,它會轉到表格的最後一個元素。

此行爲不是非常優化的:我希望VoiceOver在空表時不會聚焦表格(因爲我們在加載時已經有聲音,所以不需要將模式微調器聚焦),然後轉到第一個元素當它被加載。

我該怎麼做?

+0

目前尚不清楚問題所在。 VoiceOVer焦點控制或ViewController加載時發生的情況。絕對不應該隱藏VoiceOver中的可見視圖。在那裏有一張桌子並且它是空的這一事實很重要。這就是說,也許這不應該被ViewController加載的第二個共享,並且存在動態內容問題。你最初可能可以做一些更明智的事情......但由於你的解釋,你很難理解你的佈局和實際問題......圖片??? – ChrisCM

+0

嗯,它只是一個全屏UITableView的空ViewController。在加載時有一個空列表沒有意義,因爲它是控制器中的唯一視圖,並且我們在應用程序中隨處可見特定的加載聲音。 據我所知,VoiceOver描述了屏幕上顯示的內容,但是在加載時有一個空列表並不十分相關,並且污染了體驗。 – natinusala

+0

如果在那裏有一個列表,它應該是可訪問的。如果它不相關,爲什麼它甚至在屏幕上開始?如果你想「不污染體驗」,那麼直到有數據時,才把它從每個人都隱藏起來。想知道什麼是污染的體驗?有視力障礙的用戶在視圖控制器上「看到」一個視圖,想要更多關於它的信息,在視圖上運行他們的手指,期望得到有用的反饋,但是有一些善意的(但最終是無知的)開發者隱藏了VoiceOver的視圖。這是一種被污染的經歷。 – ChrisCM

回答

1

您想要將您的加載覆蓋屏幕設置爲模態視圖。 Modal意味着視圖背後的事物不可操作(或VoiceOver可以聚焦)。

//Instantiate a view controller with your loading spinner. 
_modalDialogViewController = [[UIStoryboard storyboardWithName:@"ModalDialog" bundle:[NSBundle mainBundle]] 
         instantiateViewControllerWithIdentifier:@"AccessibleSpinnerModal"]; 

//Make this view controller modal, meaning only things on this screen will be actionable/focusable. 
_modalDialogViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; 

您也可能會需要在這兩種風格來使用輔助的通知。

//Announce that content is loading directly 
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Stuff is laoding"); 

或者

//Shift focus to the view in your modal that is sharing the status of the loading content. 
UIAccessibilityPostNotification(UIAccessibilityLayoutChanged, spinnerView); 

這將導致焦點移動到該視圖。

+0

我可以通過直接使用'UIActivityIndi​​catorView'來實現同樣的效果嗎,沒有故事板? – natinusala

+0

是的,你可以在一個空列表旁邊設置一個微調,並讓它們都聚焦:)。老實說,有些方法可以直接使用可訪問性API來隱藏東西。但他們是黑客,並導致其他AT無法訪問的解決方案。這是正確的解決方案,您應該使用它,添加一個帶有微調器的XIB並且正確地做到這一點對於「最少代碼行」解決方案來說是最小的額外工作,這是一個荒謬的可訪問性API hack,我並不真正想要分享,當一個「正確」的非黑客解決方案可用,顯然是正確的選擇。 – ChrisCM