2012-03-26 27 views
4

我正在創建基於視圖的應用程序,我將通過addSubview方法進入下一個視圖。 問題是,當我打開VoiceOver ON功能並添加子視圖時,它會從先前視圖獲取配件標籤。也就是說,如果我在rect上點擊視圖,在之前的視圖中有標籤,那麼VoiceOver也會將其檢測爲輔助功能標籤並開始讀取該標籤。 但是,如果我使用導航控制器去下一個視圖控制器,我不會有任何問題。 任何人都可以告訴我,如果蘋果本身支持VoiceOver設施僅適用於基於導航的應用程序,或者在基於視圖的應用程序中有VoiceOver的其他解決方案?VoiceOver讀取iPhone應用程序中以前視圖上的標籤?錯誤?

PS我也嘗試了一些演示應用程序也一樣,但結果相同。

因此,在當前視圖中,我添加了一個包含按鈕的子視圖,而輔助功能也讀取了子視圖後面的標籤。我希望閱讀添加視圖的按鈕的可訪問性,以及前一視圖的可視部分的剩餘部分(而不是隱藏在添加視圖後面的標籤)。 有人可以告訴,如果它是iPhone的配音錯誤,默認情況下,它也讀取parentView的標籤,在addsubview?

+0

是你隱藏的標籤放置在您的視圖中選中了隱藏的複選框,或者你輸入他們的廈門國際銀行或情節串連圖板,他們只是被存儲在邊欄上? – 2012-03-27 00:33:37

+0

我的標籤隱藏在添加的視圖後面。我剛纔在我的問題中詳細闡述了它。 我在當前視圖中添加子視圖,其中包含按鈕,這個子視圖背後有一些標籤,配音也讀取這些標籤,這不應該發生。 – vipsk 2012-03-27 09:51:52

+0

你在使用故事板嗎? – 2012-03-27 11:09:37

回答

1

使用該屏幕改變通知

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); 

,如果你需要聚焦於特定的對象/視圖,然後通過這些無償的地方。

+0

我們需要添加這條線嗎? – Sandy 2018-02-02 13:53:22

+0

viewWillAppear()將工作 – 2018-02-05 06:00:25

+0

只有確切的相同的行或我們需要改變一些東西? – Sandy 2018-02-05 06:05:04

6

如果一個視圖位於視圖層次結構中,即使它被另一視圖遮擋,VoiceOver也會檢測到該視圖。

您不應該通過在前一個視圖的頂部添加新視圖來移動到另一個內容屏幕。你的應用程序的每個屏幕應該是UIViewController,而不僅僅是一個普通的UIView。這給你很多好處,其中之一就是視圖控制器可以在屏幕關閉時自動卸載其視圖,並且存在內存警告。

要管理應用程序中屏幕之間的轉換,應該使用容器控制器(如導航控制器(或您自己的定製控件))。如果你喜歡,你可以禁用導航欄和過渡效果,並用它來管理你的視圖堆棧。將新的視圖控制器推入堆棧時,前一個將被移除,並且問題消失。

因此,您應該認真重新考慮您管理屏幕和視圖的方式。在某種容器內部是要走的路。至少,當你向屏幕添加一個新視圖時,你應該刪除舊視圖。

+0

https://stackoverflow.com/questions/48587155/voiceover-access-previous-screen-element任何想法? – Sandy 2018-02-02 17:23:14

2

我和你有同樣的問題,我花了一些時間來解決這個問題。 當您將視圖B添加到視圖A上時,您不會隱藏視圖A.該視圖將繼續存在,並且與VoiceOver預期的一樣,它將讀取該視圖/標籤。

您可以使用Xcode爲您提供的調試視圖來查看此類問題。我寫了一個例子來讓你知道VoiceOver如何看你的標籤。

當您使用addSubview,你的看法層次是這樣的:

overview

因此,在這種情況下,容器視圖,您好堆棧!標籤在Hello World標籤上。作爲用戶,您看不到標籤Hello World。但是voiceOver可以看到該視圖。

好了,現在問題已經知道了,解決方案是:只要你想添加一個視圖到另一個視圖,首先隱藏前一個視圖。然後使用xcode的Debug View來查看你的視圖是如何的。

我解決這個問題向您展示如何糾正我演示了錯誤:

代碼: enter image description here

調試視圖:

  • 第一個標籤:postimg.org/image/cabhadzrl/
  • 第二個標籤:postimg.org/image/nsldgjb41/5605fbcd/

如果你是觀察者,我已經在標籤之間添加了一個視圖容器,但這個視圖只是爲了改善層次結構的視野。

2

您可以將視圖的accessibilityViewIsModal屬性設置爲YES。

@property(nonatomic)BOOL accessibilityViewIsModal NS_AVAILABLE_IOS(5_0);

通知接收視圖是否應該被可訪問性視爲模態。如果是,則該視圖外的 元素將被忽略。只有這個視圖中的元素纔會被暴露。 默認==編號爲

因此,無論您要添加哪個視圖,請將accessibilityViewIsModal設置爲YES/true。

view.accessibilityViewIsModal = YES

相關問題