2015-04-06 74 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会播放“叮叮”声。

一种可能的解决方案是子类化并让每个旋钮元素保持当前值,或让每个旋钮元素向代理请求值并将增量和减量方法转发给该代理。