我用两个拇指创建了一个自定义范围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];
答案 0 :(得分:2)
当用户向上或向下滑动时,将使用accessibilityIncrement
和accessibilityDecrement
调用可调元素。当发生这种情况时,预计会改变其accessibilityValue
。如果值没有改变,VoiceOver会将其解释为已达到可能值的边界(允许的最低值或高度值)并且将播放" ding"声音向用户指示该手势无效。
普通UIAccessibilityElement
没有(据我所知)实现增量和减量方法,你似乎没有修改这些元素的值。因此,当用户关注其中一个元素时,该方法没有实现,并且值不会改变,因此VoiceOver播放" ding"声音。
一种可能的解决方案是子类化并让每个knob元素保持当前值,或者让每个knob元素向代理询问值,并将增量和减量方法转发给该代理。
答案 1 :(得分:0)
您可以使用ERROR: column "mon" does not exist.
来解决问题,但我不认为这是custom actions
与VoiceOver的recommended solution。
您最初使用具有UISlider
特性的increment
和decrement
方法遵循正确的路径。
问题与您的实现有关:我认为,最好的方法是使用委托解决方案根据旋钮的位置调整滑块值。