2010-12-02 23 views
2

J'ai une cellule Table View personnalisée qui affiche les détails d'une conférence téléphonique. Le corps du constructeur de la cellule est inférieure à:Impossible d'accéder aux éléments TableViewCell à l'aide d'UI Automation

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString*) reuseIdentifier { 
if(self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) { 
     self.contentView.isAccessibilityElement = YES; 
     self.contentView.accessibilityLabel = @"Blah"; 

     conferenceNameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; 
     conferenceNameLabel.adjustsFontSizeToFitWidth = YES; 
     conferenceNameLabel.font = [UIFont systemFontOfSize:14]; 
     conferenceNameLabel.isAccessibilityElement = YES; 
     conferenceNameLabel.accessibilityLabel = @"Name"; 
     [self.contentView addSubview:conferenceNameLabel]; 

     conferenceDateLabel = [[UILabel alloc] initWithFrame:CGRectZero]; 
     conferenceDateLabel.adjustsFontSizeToFitWidth = YES; 
     conferenceDateLabel.font = [UIFont systemFontOfSize:14]; 
     conferenceDateLabel.isAccessibilityElement = YES; 
     conferenceDateLabel.accessibilityLabel = @"Date"; 
     [self.contentView addSubview:conferenceDateLabel]; 

     recurringIconView = [[UIImageView alloc] initWithFrame:CGRectZero]; 
     [recurringIconView setContentMode:UIViewContentModeScaleAspectFit]; 
     recurringIconView.isAccessibilityElement = YES; 
     recurringIconView.accessibilityLabel = @"Icon"; 
     [self.contentView addSubview:recurringIconView]; 

     [self setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
} 

return self; 

}

Lorsque vous utilisez UI Automation, je peux accéder à la vue de contenu en utilisant l'étiquette d'accessibilité « Blah ». Mais je ne peux pas accéder à l'une de mes étiquettes ou mon ImageView. Une raison pour laquelle je ne peux pas obtenir à ces éléments de l'interface utilisateur en utilisant l'automatisation de l'interface utilisateur?

Répondre

4

Au sein de votre script, vous devriez être en mesure d'ouvrir une session sur la hiérarchie d'accessibilité pour chaque cellule en utilisant logElementTree():

cell.logElementTree(); 

Ces sous-vue doit apparaître dans cette connecté arbre, ainsi que leurs étiquettes d'accessibilité.

Si vous ne pouvez pas répondre en quelque sorte ces éléments par leur label, vous devriez être en mesure de les saisir par leur position relative dans la liste des vues frères et soeurs:

var firstLabel = cell.elements()[0]; 

Je marche à travers des exemples UI Automation et spectacle de la façon de tester les vues de table comme ça dans mon course on iTunes U.

+0

Je vais devoir vérifier votre matériel de cours, peut-être qu'il y aura un "moment AHA" et je me rendrai compte que je faisais quelque chose de stupide. –

+0

J'ai essayé de consigner l'arborescence des éléments, mais UI Automation signale que ma cellule contient une liste d'éléments de longueur 1 et que cet élément est un UIAElement dont le nom et la date correspondent à la valeur null. –

+4

@Jonathan - Cela peut être dû au fait qu'il ressemble à des cellules de table sont des conteneurs d'accessibilité: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iPhoneAccessibility/Making_Application_Accessible/Making_Application_Accessible.html% 23 // apple_ref/doc/uid/TP40008785-CH102-SW3. Vous devrez peut-être remplacer les méthodes de protocole UIAccessibilityContainer dans votre cellule de tableau personnalisée pour renvoyer le nombre correct d'étiquettes et un tableau de ces étiquettes. Cependant, sachez que cela peut réduire l'accessibilité de votre application aux utilisateurs malvoyants. –