【问题标题】:Accessibility on custom UISlider自定义 UISlider 的可访问性
【发布时间】:2015-04-06 02:51:05
【问题描述】:

我创建了一个带有两个拇指的自定义范围 UISlider。但是在 VoiceOver 模式下,我无法上下滑动来调整拇指。

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];

【问题讨论】:

    标签: ios uiaccessibility


    【解决方案1】:

    当用户向上或向下滑动时,将使用accessibilityIncrementaccessibilityDecrement 调用可调整元素。发生这种情况时,预计会更改其accessibilityValue。如果该值未更改,VoiceOver 会将其解释为已达到可能值的边界(允许的最低值或高度值),并将播放“叮”声以向用户指示手势无效。

    普通的UIAccessibilityElement 没有(据我所知)实现递增和递减方法,而且您似乎没有修改这些元素的值。因此,当用户关注其中一个元素时,不会实现该方法并且值不会改变,因此 VoiceOver 会播放“叮”的声音。

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

    【讨论】:

      【解决方案2】:

      您可以使用custom actions 来解决您的问题,但我认为recommended solution 不是带有旁白功能的UISlider

      您最初使用带有 adjustable 特征的 incrementdecrement 方法遵循了正确的道路。

      您的实现中遇到的问题:在我看来,最好的方法是定义前两种方法,以便根据旋钮位置调整滑块值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 2018-05-20
        • 1970-01-01
        • 1970-01-01
        • 2021-07-27
        相关资源
        最近更新 更多