2010-11-09 13 views
8

Non importa cosa provo, non riesco a mantenere la mia UITableViewCell personalizzata dall'agire come dovrebbe con le regole predefinite per UIAccessiblity. Non voglio che questa cella si comporti come un contenitore di accessibilità (di per sé), quindi seguendo questo guide dovrei essere in grado di rendere accessibili tutte le mie sottoview, giusto ?! Dice di rendere ciascun elemento accessibile separatamente e assicurarsi che la cella stessa non sia accessibile.Problemi personalizzati di UITableViewCell con elementi di accessibilità UIA

- (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] 

Il Voice over sistema legge il contenuto della cellula intera tutti in una volta, anche se sto cercando di fermare quel comportamento. Potrei dire

 [sub2 setIsAccessibilityElement:NO]; 

ma questo renderebbe questo elemento completamente illeggibile. Voglio tenerlo leggibile, ma non avere l'intera cella da trattare come un contenitore (e si presume che sia la lingua inglese). Non sembra che ci siano molte informazioni là fuori, quindi per lo meno mi piacerebbe documentarlo.

+1

fai a sapere se la sua ricorsiva attraverso le subviews? –

+0

Come se si imposta IsAccessibilityElement su YES, si dice tutto? –

risposta

12

Se si dispone di 2 elementi separati (sub1 e sub2), si potrebbe sostituire i metodi del protocollo informali UIAccessibilityContainer.

- (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

L'ho già fatto e ha funzionato. È un vero dolore. –

+0

lub you, sei fantastico :) – thndrkiss

+1

L'ultimo 'return 0;' in 'indexOfAccessibilityElement:' dovrebbe essere: 'return NSNotFound;' – plu

0

In iOS 8 o più recente, si può semplicemente impostare la proprietà accessibilityElements:

// 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]? 
Problemi correlati