当在跳板上使用语音转换时,当选择屏幕底部的UIPageControl时,VoiceOver会宣布类似“第1页,共5页可调整”的内容。并且用户可以向上和向下滑动以更改页面。
在我的应用中,我没有获得“可调整”部分,并且无法通过滑动更改页面。
我是如何解决这个问题的?它显然会破坏应用程序的可用性。
答案 0 :(得分:8)
我已经将[{1}}子类化,并覆盖了UIPageControl
获取者以返回-accessibilityTraits
让Voice Over读取“可调”。
要添加操作:实施UIAccessibilityTraitAdjustable
类别中指定的-accessibilityIncrement
和-accessibilityDecrement
方法。
由于我的网页会回复UIAccessibilityAction
个事件,因此我也确保为此活动发送动作。
示例代码
UIControlEventValueChanged
答案 1 :(得分:4)
如果您支持iOS 9及更高版本,此行为现已成为标准 - 无需特殊处理。
如果您支持iOS 8及更低版本,则继承UIPageControl
并覆盖accessibilityIncrement
和accessibilityDecrement
。您无需覆盖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。