2015-04-06 106 views
0

我用兩個拇指創建了自定義範圍UISlider。但是在VoiceOver模式下,我無法上下滑動以調整拇指。自定義UISlider上的輔助功能

UIAccessibilityElement *minElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 
minElement.accessibilityFrame = [self convertRect:currentThumbRect 
              toView:nil]; 
minElement.accessibilityLabel = NSLocalizedString(@"Minimum", nil); 
minElement.accessibilityTraits = UIAccessibilityTraitAdjustable; 

[_accessibleElements addObject:minElement]; 

UIAccessibilityElement *maxElement = [[UIAccessibilityElement alloc] 
             initWithAccessibilityContainer:self]; 
maxElement.accessibilityFrame = [self convertRect:currentUpperThumbRect 
              toView:nil]; 
maxElement.accessibilityLabel = NSLocalizedString(@"Maximum", nil); 
maxElement.accessibilityTraits = UIAccessibilityTraitAdjustable; 

[_accessibleElements addObject:maxElement] 

我在上面添加了代碼,以便VoiceOver可以單獨識別兩個拇指,但我無法調整拇指。任何想法都可以在VoiceOver中調整大拇指。


問題就迎刃而解了:

我用 'UIAccessibilityCustomAction' 在自定義行爲增加。而不是上下滑動以調整值,在自定義行爲中上下滑動可用於選擇動作並雙擊執行。

UIAccessibilityElement *minElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 
minElement.accessibilityLabel = NSLocalizedString(@"Minimum", nil); 
UIAccessibilityCustomAction *increaseMinAction = [[UIAccessibilityCustomAction alloc] initWithName:NSLocalizedString(@"Increase minimum", @"action to increase min") 
                           target:self selector:@selector(accessibilityMinIncrement)]; 
UIAccessibilityCustomAction *decreaseMinAction = [[UIAccessibilityCustomAction alloc] initWithName:NSLocalizedString(@"Decrease minimum", @"action to decrease min") 
                           target:self selector:@selector(accessibilityMinDecrement)]; 
minElement.accessibilityCustomActions = @[increaseMinAction, decreaseMinAction]; 
[_accessibleElements addObject:minElement]; 

回答

1

的可調節的元件將與accessibilityIncrementaccessibilityDecrement當用戶或刷卡上下被調用。發生這種情況時,預計將更改其accessibilityValue。如果該值沒有改變,VoiceOver會將其解釋爲已達到可能值的邊界(允許的最低或高度值),並播放「叮噹」聲音以向用戶表明該手勢沒有效果。

一個普通的UIAccessibilityElement沒有(據我所知)執行遞增和遞減方法,你似乎不會修改這些元素的值。因此,當用戶關注其中一個元素時,該方法未實現,且值不會改變,因此VoiceOver會播放「叮叮」聲。

一種可能的解決方案是子類化並讓每個旋鈕元素保持當前值,或讓每個旋鈕元素向代理請求值並將增量和減量方法轉發給該代理。