UIPageControl和VoiceOver /辅助功能

时间:2012-04-01 21:26:36

标签: ios accessibility uipagecontrol

当在跳板上使用语音转换时,当选择屏幕底部的UIPageControl时,VoiceOver会宣布类似“第1页,共5页可调整”的内容。并且用户可以向上和向下滑动以更改页面。

在我的应用中,我没有获得“可调整”部分,并且无法通过滑动更改页面。

我是如何解决这个问题的?它显然会破坏应用程序的可用性。

3 个答案:

答案 0 :(得分:8)

我已经将[{1}}子类化,并覆盖了UIPageControl获取者以返回-accessibilityTraits让Voice Over读取“可调”。

要添加操作:实施UIAccessibilityTraitAdjustable类别中指定的-accessibilityIncrement-accessibilityDecrement方法。

由于我的网页会回复UIAccessibilityAction个事件,因此我也确保为此活动发送动作。

示例代码

UIControlEventValueChanged

答案 1 :(得分:4)

如果您支持iOS 9及更高版本,此行为现已成为标准 - 无需特殊处理。

如果您支持iOS 8及更低版本,则继承UIPageControl并覆盖accessibilityIncrementaccessibilityDecrement。您无需覆盖accessibilityTraits属性以指示其可调整 - UIPageControl默认情况下可调整。

import UIKit

class AccessibleUIPageControl: UIPageControl {

    override func accessibilityIncrement() {
        self.currentPage += 1
        self.sendActionsForControlEvents(.ValueChanged)
    }

    override func accessibilityDecrement() {
        self.currentPage -= 1
        self.sendActionsForControlEvents(.ValueChanged)
    }

}

然后在您的视图控制器中,您可以侦听ValueChanged并进行适当的响应以显示新页面的内容:

//viewDidLoad:
self.pageControl.addTarget(self, action: "didChangePage", forControlEvents: .ValueChanged)

func didChangePage() {
    let contentOffset: CGFloat = collectionView.frame.size.width * CGFloat(pageControl.currentPage)
    collectionView.setContentOffset(CGPointMake(contentOffset, 0), animated: false)
}

请注意,如果您没有子类UIPageControl,则仍会调用此目标/操作,但当前页面点指示符不会更新。

答案 2 :(得分:0)

我仍然需要使用iOS 10+实现自定义AccessiblePageControl(如上所述)。我按照上面的方法进行操作,但是在我的情节提要中为IB链接了一个IBAction,用于touchUpInside和valueChanged。