2015-07-20 110 views
3

我試圖從VoiceOver隱藏我的應用程序中的幾個元素,這樣他們就不會被屏幕閱讀器朗讀。在iOS上,我將isAccessibilityElement設置爲NO,但這對OSX沒有影響。有關從VoiceOver隱藏元素的正確方法是什麼?禁用/隱藏輔助功能元素

例如,我在視圖中包含一系列標籤,如果它們由VoiceOver單獨說出,那麼這些標籤是沒有意義的。我想在容器視圖上設置accessibilityLabel來描述嵌套在其中的所有標籤。但是如果我這樣做,裏面的標籤仍然會被VoiceOver讀出。

回答

2

如果將元素的可訪問性角色設置爲空字符串,Voice Over將不會檢測到它。我不得不在應用程序中隱藏一些NSImageView元素,因爲他們的文件名正在被讀出,這讓VO用戶感到困惑。

要麼

[element accessibilitySetOverrideValue:@"" forAttribute:NSAccessibilityRoleAttribute];

否則

[[element cell] accessibilitySetOverrideValue:@"" forAttribute:NSAccessibilityRoleAttribute];

應該做的伎倆。

我知道蘋果基於Accessibility API的新方法,但它只適用於OS X 10.10以上,我正在使用的應用程序需要與10.9兼容。

如果您可以使用新的API [element setAccessibilityRole:@""];[[element cell] setAccessibilityRole:@""];應該做同樣的事情。

+1

實際上,[元素setAccessibilityRole:@「」]中的MacOS 10.12工作如本說明回答。但是,這種行爲是無證的。在NSAccessibilityConstants.h中列出了幾十個受支持的常量:NSAccessibilityUnknownRole,NSAccessibilityButtonRole,...。但他們中沒有一個表示「不可訪問」或「沒有角色」,並且沒有一個是空字符串。結論:這種行爲可能會在未來的macOS版本中發生變化。 –

3

在macOS中,設置accessibilityElementNONSButtonNSTextFieldNSImageView確實沒有任何影響。那是因爲這些是控件 - 它們繼承自NSControl。要使其適用於控件,則必須改爲使用控件的單元格

在一個Objective-C項目中,我分類了幾個Cocoa控件。例如,每當我想要一個圖像以便由VoiceOver的被跳過,我在界面生成器設置它的定義類這樣:

/*! 
@brief Image view which will be skipped over by VoiceOver 

@details Be careful that you *really* want the view to be skipped over by 
VoiceOver, because its meaning is conveyed in a better, non-visual way, 
elsewhere. Remember that not all VoiceOver users are completely blind. 
    */ 
@interface SSYNoVoiceOverImageView : NSImageView {} 
@end 

@implementation SSYNoVoiceOverImageView 

- (void)awakeFromNib { 
    self.cell.accessibilityElement = NO; 
} 

@end