2012-04-12 79 views
5

我正在通過我們的iOS應用程序修復可訪問性問題。該應用程序的功能之一是用戶可以輸入搜索查詢的UITextField。我將該領域的特點設定爲「搜索領域」,而VoiceOver大多數時間都在該領域做得很好。當字段中有文本時,它會讀取文本,然後顯示「搜索字段」。如何爲UITextField中的佔位符文本設置可訪問性特徵?

我想解決的問題是VoiceOver如何處理佔位符文本。當文本字段爲空時,我們將佔位符文本設置爲顯示示例查詢。由於它顯示爲灰色文字,所以有遠見的用戶可以看到它只是佔位符文本。但是VoiceOver對於視障用戶並沒有這樣的區別。它只是像普通文本一樣讀取佔位符文本,沒有額外的描述。

有沒有辦法將可訪問性特徵添加到UITextField的佔位符文本?或者讓人們通過其他方式解決這個問題?

回答

0

我相信你可以在NSString對象上設置accessibilityLabel和其他輔助屬性,然後使用該字符串作爲佔位符文本。配音將發現該財產並使用它。

NSString *placeholderText = @"Search"; 
placeholderText.accessibilityLabel = @"Try searching for xxxx"; 
field.placeholder = placeholderText; 

就是這樣的。未經測試,但我在其中一個WWDC開發人員視頻中看到了它。

警告:iOS 8.0及更高版本中的行爲與預期不符。

//In iOS 8+ 
NSString *placeholderText = @"Search"; //This will be announced 
placeholderText.accessibilityLabel = @"Try searching for xxxx";//This will be ignored 
field.placeholder = placeholderText; 

此答案應視爲過期。

+0

這是不合情理的。特質僅適用於UI對象。 – ChrisCM 2015-08-13 00:07:22

+0

除了他們沒有,我想:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html#//apple_ref/doc/uid/TP40012857-UISegmentedControl-SW16 – 2015-08-14 23:57:36

+0

這是指分段控制和可訪問性標籤不是特徵。請看這個開放源代碼庫,看看爲什麼你的解決方案實際上是非感性的,也是爲什麼特徵不適用於NSString對象,甚至當它們應用於分段控件時。分段控件恰好是NSStrings上的accessibilityLabels的一個例外,雖然我沒有評論這些。但是,在我的演示中,您將會看到,此例外不適用於佔位符文本,正如OP所要求的那樣。 https://github.com/chriscm2006/iOS-Traits-on-NSStrings – ChrisCM 2015-08-15 01:54:50

0

你不行。特徵只對可訪問性元素有意義。對於你的UITextField是「靜態文本」可能是不正確的。即使它可能是有效的代碼,在文本字段內的項目上設置特徵將不起作用。

你可以做的是編輯控件的accessibilityLabel。

0

派生從的UITextField一個自定義類,如下所示(代碼是斯威夫特,但你能適應的Objective-C):

class MyTextField: UITextField { 
    override public var accessibilityValue: String? { 
     get { return self.text } 
     set { super.accessibilityValue = newValue } 
    } 
} 

使用這個類作爲一個自定義類,而不是的UITextField。當字段爲空時,這將停止VoiceOver讀取佔位符文本。

然後將您的輔助功能標籤設置爲例如「搜索」和可訪問性提示,無論你想提示什麼(請參閱Apple的Guidelines for Creating Hints)。您可以通過編程方式分配這些值,但最好在Interface Builder中指定它們。

相關問題