2012-04-01 27 views
7

Khi sử dụng giọng nói trên bàn đạp, khi UIPageControl ở dưới cùng của màn hình được chọn, VoiceOver thông báo một cái gì đó như "Trang 1/5. Điều chỉnh". và người dùng có thể vuốt lên và xuống để thay đổi các trang.UIPageControl và VoiceOver/Accessibility

Trong ứng dụng của tôi, tôi không nhận được phần "Có thể điều chỉnh" và không thể thay đổi các trang bằng cách vuốt.

Bất kỳ ý tưởng nào về cách khắc phục sự cố này? Nó rõ ràng giết chết khả năng sử dụng của ứng dụng.

+0

Bạn có đang thực hiện việc này trong InterfaceBuilder hoặc theo chương trình không? Có vẻ như nó thiếu đặc điểm [UIAccessibilityTraitAdjustible] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAccessibilityAction_Protocol/Introduction/Introduction.html) - bạn đang sử dụng Điều khiển trang trực tiếp hay bên trong một góc nhìn khác biết cách quản lý nó?) –

Trả lời

8

Tôi đã phân loại UIPageControl và bỏ qua số -accessibilityTraits getter để trả lại UIAccessibilityTraitAdjustable nhận Voice Over để đọc "có thể điều chỉnh".

Để thêm hành động: triển khai các phương pháp -accessibilityIncrement-accessibilityDecrement được chỉ định trong danh mục UIAccessibilityAction.

Vì các trang của tôi phản hồi sự kiện UIControlEventValueChanged, tôi cũng đảm bảo gửi hành động cho sự kiện này.

Mẫu mã

@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

Thông thường, bạn [kết hợp các đặc điểm] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAccessibility_Protocol/#//apple_ref/occ/instp/NSObject/accessibilityTraits) từ 'super' với các đặc điểm mong muốn, như' return super.accessibilityTraits | UIAccessibilityTraitAdjustable'. – Adrian

3

Nếu bạn đang hỗ trợ iOS 9 và mới hơn, hành vi này ngay bây giờ là tiêu chuẩn - không cần xử lý đặc biệt theo yêu cầu.

Nếu bạn đang hỗ trợ iOS 8 trở xuống, lớp con UIPageControl và ghi đè accessibilityIncrementaccessibilityDecrement. Bạn không cần ghi đè thuộc tính accessibilityTraits để cho biết nó có thể điều chỉnh - UIPageControl được điều chỉnh theo mặc định.

import UIKit 

class AccessibleUIPageControl: UIPageControl { 

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

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

} 

Sau đó, trong điều khiển điểm của bạn, bạn có thể nghe cho ValueChanged và đáp ứng một cách thích hợp để hiển thị các nội dung cho trang mới:

//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) 
} 

Lưu ý rằng nếu bạn không phân lớp UIPageControl mục tiêu này/hành động sẽ vẫn được gọi nhưng chỉ báo chấm trang hiện tại sẽ không cập nhật.

+0

Xin chào, vấn đề tôi gặp phải với kiểm soát trang là tôi không thể làm cho nó tăng hoặc giảm bộ đếm khi tiêu điểm ở trên đó. Tôi đang nhắm mục tiêu nền tảng iOS 10 trở lên. Có cách nào giúp tôi không? Cảm ơn! –

+0

@KarthikKannan Xin lỗi, tôi chưa tự mình gặp vấn đề đó – Joey

Các vấn đề liên quan