2012-04-01 12 views
7

Wenn Voiceover auf dem Sprungbrett mit VoiceOver am unteren Rand des Bildschirms UIPageControl ausgewählt wird, wird etwas wie "Seite 1 von 5. Adjustable" angezeigt. und der Benutzer kann nach oben und unten wischen, um die Seiten zu wechseln.UIPageControl und VoiceOver/barrierefrei

In meiner App bekomme ich nicht den "Einstellbaren" Teil, und die Seiten können nicht durch Wischen geändert werden.

Irgendwelche Ideen, wie ich das beheben? Es tötet natürlich die Benutzerfreundlichkeit der App.

+0

Machst du das in InterfaceBuilder oder programmatisch? Es klingt, als ob es die Eigenschaft fehlt [UIAccessibilityTraitAdjustible] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAccessibilityAction_Protocol/Introduction/Introduction.html) - verwenden Sie die Seitensteuerung direkt oder innerhalb eine andere Ansicht, die weiß, wie man es verwaltet?) –

Antwort

8

Ich habe UIPageControl unterklassiert und überschreibe die -accessibilityTraits Getter zurück UIAccessibilityTraitAdjustable bekommen Voice Over zu lesen "einstellbar".

Hinzufügen von Aktionen: Implementieren Sie die in der Kategorie UIAccessibilityAction angegebenen Methoden -accessibilityIncrement und -accessibilityDecrement.

Da meine Seiten auf die Ereignisse UIControlEventValueChanged reagieren, stelle ich sicher, dass auch Aktionen für dieses Ereignis gesendet werden.

Beispielcode

@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

Normalerweise [kombinieren Sie die Eigenschaften] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAccessibility_Protocol/#/apple_ref/occ/instp/NSObject/accessibilityTraits) von 'super' mit den gewünschten Merkmalen, wie' return super.accessibilityTraits | UIAccessibilityTraitAdjustable'. – Adrian

3

Wenn Sie iOS 9 und neuere sind unterstützt, ist dieses Verhalten jetzt der Standard - keine spezielle Handhabung erforderlich.

Wenn Sie unterstützt iOS 8 und niedriger, Unterklasse UIPageControl und außer Kraft setzen accessibilityIncrement und accessibilityDecrement. Sie müssen die Eigenschaft accessibilityTraits nicht überschreiben, um anzuzeigen, dass sie einstellbar ist - UIPageControl ist standardmäßig einstellbar.

import UIKit 

class AccessibleUIPageControl: UIPageControl { 

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

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

} 

Dann in Ihrem View-Controller können Sie für Value hören und entsprechend darauf zu reagieren, den Inhalt für die neue Seite zu zeigen:

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

Beachten Sie, dass, wenn Sie eine Unterklasse nicht UIPageControl dieses Ziel/Aktion immer noch angerufen werden, aber die aktuelle Seite Punktanzeige wird nicht aktualisiert.

+0

Hallo, das Problem, das ich mit der Seitensteuerung habe, ist, dass ich nicht in der Lage bin, den Zähler zu erhöhen oder zu verringern, wenn der Fokus darauf liegt. Ich ziele auf Plattformen ab iOS 10. Irgendeine Möglichkeit, mir zu helfen? Vielen Dank! –

+0

@KarthikKannan Tut mir leid, ich habe dieses Problem nicht selbst gesehen – Joey

Verwandte Themen