2010-11-09 12 views
8

Egal, was ich versuche, kann ich nicht meine benutzerdefinierte UITableViewCell von handeln wie es sollte unter den Standardregeln für UIAccessiblity. Ich möchte nicht, dass sich diese Zelle wie ein Container für Barrierefreiheit verhält (per se), also sollte ich nach dieser guide alle meine Subviews zugänglich machen können, richtig ?! Es heißt, jedes Element separat zugänglich zu machen und sicherzustellen, dass die Zelle selbst nicht zugänglich ist.Benutzerdefinierte UITableViewCell Problem mit UIAcessibility-Elemente

- (BOOL)isAccessibilityElement 
{ 
    return NO; 
} 

- (NSString *)accessibilityLabel 
{ 
    return nil; 
} 

- (NSInteger)accessibilityElementCount 
{ 
    return 0; 
} 


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier //cells use this reusage stuff 
{ 
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) 
    { 
     [self setIsAccessibilityElement:NO]; 
     sub1 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)]; 
     [sub1 setAccessibilityLanguage:@"es"]; 
     [sub1 setIsAccessibilityElement:YES]; 
     [sub1 setAccessibilityLabel:sub1.text] 

     sub2 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)]; 
     [sub2 setAccessibilityLanguage:@"es"]; 
     [sub2 setIsAccessibilityElement:YES]; 
     [sub2 setAccessibilityLabel:sub2.text] 

Die Voice-over-System liest den Inhalt der gesamten Zelle auf einmal, obwohl ich versuche, dieses Verhalten zu stoppen. Ich könnte sagen

aber das würde würde dieses Element völlig unlesbar machen. Ich möchte es lesbar halten, aber nicht die ganze Zelle wie einen Container behandeln (und angenommen, dass es die englische Sprache ist). Es scheint nicht viele Informationen darüber zu geben, also möchte ich es zumindest dokumentieren.

+1

Kennen Sie seine, wenn die Subviews rekursiv durch? –

+0

Wenn Sie IsAccessibilityElement auf YES setzen, sagt das alles? –

Antwort

12

Wenn Sie zwei separate Elemente haben (sub1 und sub2), können Sie die Methoden des informellen Protokolls UIAccessibilityContainer außer Kraft setzen.

- (NSInteger)accessibilityElementCount { 
    return 2; 
} 

- (id)accessibilityElementAtIndex:(NSInteger)index { 
    if (index == 0) { 
     return sub1; 
    } else if (index == 1) { 
     return sub2; 
    } 
    return nil; 
} 

- (NSInteger)indexOfAccessibilityElement:(id)element { 
    if (element == sub1) { 
     return 0; 
    } else if (element == sub2) { 
     return 1; 
    } 
    return NSNotFound; 
} 
+0

Ich habe das schon mal gemacht und es hat funktioniert. Es ist ein echter Schmerz. –

+0

lub you, du bist genial :) – thndrkiss

+1

Die letzte 'return 0;' in 'indexOfAccessibilityElement:' sollte sein: 'return NSNotFound;' – plu

0

In iOS 8 oder höher, kann man einfach die accessibilityElements Eigenschaft:

// A list of container elements managed by the receiver. 
// This can be used as an alternative to implementing the dynamic methods. 
@available(iOS 8.0, *) 
public var accessibilityElements: [AnyObject]? 
Verwandte Themen