2012-04-01 194 views
7

在跳板上使用語音功能時,如果選擇屏幕底部的UIPageControl,VoiceOver會宣佈類似「第1頁,共5頁。可調節」的內容。用戶可以上下滑動來改變頁面。UIPageControl和VoiceOver /輔助功能

在我的應用程序中,我沒有看到「可調整」部分,並且頁面無法通過刷卡進行更改。

任何想法如何解決這個問題?它顯然殺死了應用程序的可用性。

+0

你是用InterfaceBuilder或編程方式做這個嗎?這聽起來像是缺少特徵[UIAccessibilityTraitAdjustible](http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAccessibilityAction_Protocol/Introduction/Introduction.html) - 您是直接使用Page Control還是使用了Page Control另一種知道如何管理它的觀點?) – 2012-04-20 05:37:05

回答

8

我已將子類別UIPageControl和覆蓋-accessibilityTraits獲得者返回UIAccessibilityTraitAdjustable獲取Voice Over以讀取「可調整」。

要添加操作:實施UIAccessibilityAction類別中指定的-accessibilityIncrement-accessibilityDecrement方法。

由於我的頁面對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 
+1

通常,你[結合特性](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAccessibility_Protocol/#//apple_ref/occ/instp/NSObject/accessibilityTraits)從'super'與期望的特徵,如'return super.accessibilityTraits | UIAccessibilityTraitAdjustable'。 – Adrian 2015-05-18 18:54:23

3

如果你支持的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這個目標/行動將仍然被調用,但當前頁面點指示符不會更新。

+0

嗨,我與頁面控制的問題是,我無法讓它增加或減少計數器時,它的焦點。我的目標是iOS 10及以上平臺。任何方式來幫助我?謝謝! – 2018-02-26 20:48:55

+0

@KarthikKannan對不起,我自己沒有看到這個問題 – Joey 2018-02-26 21:09:24