2016-05-31 19 views
3

我想添加iOS輔助功能支持/語音到我的應用程序。我的主屏幕有三個主要控件,但第三個控件位於嵌入式視圖控制器內。設置view.accessibilityElements與嵌入式視圖控制器

我正在設置prepareForSegue中的輔助功能元素,並確認嵌入式視圖控制器控件都已加載。問題是我仍然只能選擇封閉視圖控制器中的前兩個控件。

self.view.accessibilityElements = 
    @[ 
     self.cmdMenu,      // works 
     self.collectionView,    // works 
     self.childViewController.peerMenu // doesn't work 
    ]; 

所有三個視圖都有isAccessibilityElement = YES。

我錯過了什麼嗎?我無法想象對同一個視圖控制器中的輔助功能元素有限制。

+0

有什麼看法?還有其他的區別嗎?如果你從數組中刪除集合視圖有不同的結果? – Wain

+0

這兩個菜單視圖都是我創建的控件的實例。如果我從accessibilityElements中刪除collectionView,則只能訪問cmdMenu。 –

回答

3

我發現了我的錯誤,現在有了Voice Over工作。在這個過程中,我想出了一些我想分享的東西。

  1. 到我原來的問題,你可以在你的子視圖控制器從你的主視圖控制器引用控件。您可以直接添加控件(就像我在我的問題中那樣),或者您可以使用self.view.accessibilityElements = @[ _control1, childViewController.view, childViewController2.view]在子視圖控制器中添加所有的輔助功能元素。
  2. 如果您在子視圖控制器中添加(1)中的所有控件,則請確保childViewController.view.isAccessibilityElement = NO
  3. 您可以添加任何類型的對象到accessibilityElements,甚至沒有輔助功能信息的元素。 API不會斷言或警告你。這最終成爲我的錯誤。
  4. 如果您的用戶界面發生變化,您需要更改accessibilityElements陣列中項目的數量或順序,請使用UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self)告訴UIKit。通知參數(我發送的地址爲self)告訴Voice Over當通知完成時它應該放置光標的位置。
  5. 如果您想朗讀一些短暫通知的文本(想象一下Clash Of Clans告訴您在樹樁上找到了多少寶石),請致電UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, messageText)。一個警告,這將不會大聲朗讀messageText,除非沒有其他的Voice Over正在進行。你需要自己管理時間。在此提交了一個錯誤。蘋果公司可以讓這一切變得更好。
  6. 如果您使用UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, messageText),您可以收聽UIAccessibilityAnnouncementDidFinishNotification,但不幸的是,此通知幾乎沒有任何價值。只有當你的messageText被完全說出時,你纔會收到通知。它不會告訴你它是被說出來的,但被中斷,並且它也不會被任何通過UIKit框架說出的文本觸發。
  7. iOS模擬器中的輔助功能檢查器很糟糕。如果您的輔助功能設置正確,它可以告訴你有什麼。如果您遇到問題,Inspector不會向您提供任何有關錯誤的信息。整個UIAccessibility API都是如此。它使用起來非常簡單,幾乎總能正常工作。但是當它不起作用時,你需要求助於狩獵和啄食來找出它。該API需要一些類似於Apple處理約束警告的斷言或控制檯消息。破壞者警報:Xcode 8中的輔助功能檢查器比較好,但仍然不能解決我的問題。
  8. UIAccessibility.h標題中有很多很好的信息。如果您正在着手UIAccessibility支持,這是一個很好的閱讀。
+0

優秀的寫作!這在我們的XCUITests中引起了大量的問題,尤其是沒有使用'UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification,self)',因爲可訪問性層次結構很快就失效了。 –

相關問題