2017-09-22 3 views
0

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?

Répondre

1

Le moyen infaillible pour que cela fonctionne est de mettre en œuvre acccessibilityActivate() et d'appeler onLanguages() à partir de là.

+0

C'était génial. Je l'ai surpassé juste pour appeler [self sendActionsForControlEvents: UIControlEventTouchUpInside]; et ça a marché tout de suite. Merci beaucoup! – AlexKoren