2016-08-09 6 views
1

Ich habe eine einfache UIView-Hierarchie. Es gibt eine Elternansicht A, die die Ansichten B und C enthält. Wenn ich alle Ansichten als Barrierefreiheitselement einstelle, kann nur auf die Ansicht A zugegriffen werden. Ansichten B und C sind nicht anklickbar. Ich brauche alle Ansichten (A, B und C) als Zugänglichkeitselemente.VoiceOver Eltern- und Kindansichten als Zugänglichkeitselemente

Ich weiß, dass Sie das erreichen können, indem Sie alle Ansichten (A, B und C) auf die gleiche Ebene setzen, aber die Hierarchie in meiner App erlaubt keine Änderungen.

Haben Sie eine Lösung dafür?

+0

Haben Sie in das gesuchte UIAccessibilityContainer Protokoll? – ChrisCM

Antwort

2

Ist die Ansicht A ein Barrierefreiheitselement? Damit Subviews verfügbar sind, muss die enthaltene Ansicht nicht ein Barrierefreiheitselement sein.

view.isAccessibilityElement = false 

Wenn Sie die dritte Ansicht benötigen, A, zugänglich zu sein, macht es dann eine Geschwister Ansicht von B und C.

+0

Ich konnte kein Geschwister von B und C erstellen, da dies bereits die Ansichtshierarchie in meiner App war, aber ich verwendete die Elternansicht des A- und UIAccessibilityContainer-Protokolls, um mein Problem zu lösen. Details zur Lösung finden Sie weiter unten in der Antwort. – pawel221

0

Schließlich habe ich es mit dem UIAccessibilityContainer-Protokoll gelöst und meine vorhandene Ansichtshierarchie verwendet: A (Eltern), B (Kind) und C (Kind). Ich habe eine andere Ansicht verwendet, sagen wir X, welches Eltern von A war und implementierte ein UIAccessibilityContainer-Protokoll darin. Hier Beispielcode der Schöpfung ist ein Array von UIAccessibilityElements die im Hinblick X. erstellt wurde

- (NSArray *)voiceOverElements { 
    if (!_voiceOverElements) { 
     UIAccessibilityElement *element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 
     CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(A.frame, self); 
     element.accessibilityFrame = frame; 
     _voiceOverElements = @[element]; 
     for (UIView *view in A.subviews) { 
      UIAccessibilityElement * element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 
      CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(view.frame, A); 
      element.accessibilityFrame = frame; 
      _voiceOverElements = [_voiceOverElements arrayByAddingObject:element]; 
     } 
    } 
    return _voiceOverElements; 
} 

In der gleichen Ansicht (X) wurde UIAccessibilityContainer Protokoll wie folgt umgesetzt:

- (BOOL)isAccessibilityElement { 
    return NO; 
} 

- (id)accessibilityElementAtIndex:(NSInteger)index { 
    return [self.voiceOverElements objectAtIndex:index]; 
} 

- (NSInteger)accessibilityElementCount { 
    return self.voiceOverElements.count; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    return [self.voiceOverElements indexOfObject:element]; 
} 
Verwandte Themen