2012-10-30 5 views
5

enter image description hereZugänglichkeit für iOS, lesen Sie Voiceover-Order-Ausgabe

Ist es möglich, die Reihenfolge, in der die Voiceover-Funktion für die Barrierefreiheit in iPad ändern, um die Elemente ausliest, wenn die ‚Zwei-Finger-Flick Down‘ Geste getan wird?

Für das Bild angehängt, die 3-Etikett und eine Schaltfläche enthält, liest das Voiceover, die Elemente in der folgenden Art und Weise,

Label 1 -> Label 2 -> Button -> Label 3

Kann die um zu ändern,

Label 1 -> Label 2 -> Label 3 -> Button

Antwort

13

Der schnellste Weg, um dies für Ihr Beispiel zu erreichen, ist es, die drei Etiketten in einer transparenten UIView Unterklasse zu platzieren als dienen Behälter für y unsere Etiketten. Diese Unterklasse muss ordnungsgemäß eingerichtet sein, damit VoiceOver sie interpretieren kann. Wenn Ihr Implementierungsziel iOS6 ist, können Sie einfach die Frage "sollte Kinderzugänglichkeit unterordnen" in dieser Unterklasse beantworten.

-(BOOL)shouldGroupAccessibilityChildren{ 
    return YES; 
} 

Für unter iOS6 wäre es komplizierter sein, mit der Ausnahme, dass Ihre UIView Containerunterklasse UILabels nur enthalten würde, die Elemente Zugänglichkeit sind. Man könnte es so implementieren:

-(BOOL)isAccessibilityElement{ 
    return NO; 
} 
-(NSInteger)accessibilityElementCount{ 
    return self.subviews.count; 
} 
-(id)accessibilityElementAtIndex:(NSInteger)index{ 
    return [self.subviews objectAtIndex:index]; 
} 
-(NSInteger)indexOfAccessibilityElement:(id)element{ 
    return [self.subviews indexOfObject:element]; 
} 

ich dieses Beispiel-Code getestet haben und es tut, was Sie suchen, wenn Sie eine Klärung benötigen fügen Sie bitte einen Kommentar. Immer glücklich, die Dinge zugänglicher zu machen.

+0

Vielen Dank für diese Antwort. Aber die 'shouldGroupAccessibilityChildren' scheint nicht aufgerufen zu werden. – Breakpoint

+1

@Valtal 'shouldGroup..' ruft nur iOS6-Geräte auf, die nicht mit> = 6 SDK erstellt wurden.Bestätigen Sie außerdem, dass die Ansicht, die Ihre Beschriftungen enthält, Ihrer benutzerdefinierten Klasse in der XIB oder im Storyboard mit dem Identity Inspector entspricht. Lass es mich wissen, wenn du immer noch Probleme hast. – NJones

+0

ah, der benutzerdefinierte klasse teil ist was ich vermisst habe. dummer Fehler. Es funktioniert jetzt. Danke vielmals. und ja, ich habe auf iOS6 getestet. Ich brauche die Version unter 6, um den Rest zu testen. Also nur den Code für unter iOS 6 hinzufügen, in die benutzerdefinierte Klasse wird richtig? – Breakpoint

0

Ich denke, Sie können es im Storyboard tun. Die VoiceOver-Reihenfolge wird durch die Reihenfolge der Ansichten in der Dokumentgliederung bestimmt.

Ziehen Sie einfach die Ansichten in der Ansichtshierarchie in der richtigen Reihenfolge.

+0

Ich habe sie in der richtigen Reihenfolge, aber VoiceOver liest sie nicht richtig. Ich benutze aber iOS 9, ich weiß nicht, ob sich die Dinge seitdem geändert haben. – user1366265

+1

Nein, normalerweise werden sie im wesentlichen von links nach rechts auf dem Bildschirm gelesen –

4

Ich habe versucht, die shouldGroupAccessibilityChildren zu YES zu setzen, aber es hat nicht für mich funktioniert.

Was für mich funktionierte, war die direkte Einstellung der Eingabehilfe der Elternansicht (weil ich alle Elemente auf einmal lesen wollte/eine VoiceOver-Geste).

[cell setAccessibilityLabel:[NSString stringWithFormat:@"%@, %@", cityLabel, temperatureLabel]]; 

Die obige Snippet von Codes ist von der Apple-Dokumentation Enhancing the Accessibility of Table View Cells

0

In Swift, eine IBOutlet an die Mutter UIView Befestigung, dann shouldGroupAccessibilityChildren auf true genügt.

abc.shouldGroupAccessibilityChildren = true

Ich habe beachten Sie, dass, wenn auch isAccessibilityElement = true die Gruppierung nehmen nicht Effekt einstellen. In ähnlicher Weise verhindert das Aktivieren des Kontrollkästchens für die Barrierefreiheit im Storyboard oder in der XIB auch, dass die Gruppierung stattfindet.

Verwandte Themen