J'ai une sous-classe UIButton, ACTLanguageButton qui fait vraiment juste quelques changements de l'interface utilisateur personnalisée afin que je puisse réutiliser le style. Dans la sous-classe, j'ai le code suivant relatif à l'accessibilité:Bouton iOS VoiceOver pas appel de la méthode cible
- (BOOL)isAccessibilityElement {
return YES;
}
- (NSString *)accessibilityLabel {
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:self.language];
NSString *displayLanguage = [locale displayNameForKey:NSLocaleIdentifier value:self.language];
return [NSString stringWithFormat:@"Language Preference: %@", displayLanguage];
}
- (NSString *)accessibilityHint {
return @"Opens the list of available languages for accessible services.";
}
- (UIAccessibilityTraits)accessibilityTraits {
return UIAccessibilityTraitButton;
}
Et dans le UIView qui instancie et est le superview du bouton ACTLanguage:
self.languageButton = [[ACTLanguageButton alloc]initWithFrame:CGRectMake(self.frame.size.width - 120, 20, 120, 25)];
[self addSubview:self.languageButton];
[self.languageButton addTarget:self action:@selector(onLanguages) forControlEvents:UIControlEventTouchUpInside];
Et puis la méthode « onLanguages » se qui montre juste une vue pop-up qui apparaît sur la façon modale UIView:
- (void)onLanguages {
[self.languagePopupView showWithCallback:nil];
}
l'action bouton fonctionne parfaitement sans VoiceOver activé (tap-to-utilisation normale). De plus, lorsque j'utilise Accessibility Inspector sur OS X avec un simulateur, l'action est également très bien effectuée.
Sur un appareil réel (test sur un iPhone 5 en cours d'exécution 9.3), la méthode « onLanguages » ne fait jamais appelé. L'étiquette d'accessibilité, l'indice et les traits sont lus correctement, je peux bien focaliser l'élément, mais le double-clic ne déclenche pas la méthode "onLanguages" comme prévu.
Des idées?
C'était génial. Je l'ai surpassé juste pour appeler [self sendActionsForControlEvents: UIControlEventTouchUpInside]; et ça a marché tout de suite. Merci beaucoup! – AlexKoren