Dan*_*nor 8 accessibility uipagecontrol ios
当在跳板上使用语音转换时,当选择屏幕底部的UIPageControl时,VoiceOver会宣布类似"第1页,共5页可调整"的内容.并且用户可以向上和向下滑动以更改页面.
在我的应用程序中,我没有得到"可调整"部分,并且无法通过滑动更改页面.
我有什么想法解决这个问题?它显然会破坏应用程序的可用性.
我已经将子类化UIPageControl
并覆盖了-accessibilityTraits
getter,以便UIAccessibilityTraitAdjustable
将Voice Over 返回到"可调"状态.
要添加操作:实现类别中指定的-accessibilityIncrement
和-accessibilityDecrement
方法UIAccessibilityAction
.
由于我的页面会响应UIControlEventValueChanged
事件,因此我也确保为此事件发送操作.
示例代码
@interface AccessibleUIPageControl : UIPageControl
@end
@implementation AccessibleUIPageControl
- (UIAccessibilityTraits)accessibilityTraits
{
return super.accessibilityTraits | UIAccessibilityTraitAdjustable;
}
- (void)accessibilityIncrement
{
self.currentPage = self.currentPage + 1;
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
- (void)accessibilityDecrement
{
self.currentPage = self.currentPage - 1;
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
@end
Run Code Online (Sandbox Code Playgroud)
如果您支持 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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图控制器中,您可以监听 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)
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您不子类化UIPageControl
此目标/操作仍将被调用,但当前页面点指示器不会更新。
归档时间: |
|
查看次数: |
3228 次 |
最近记录: |