UIButtonサブクラスであるACTLanguageButtonを使用して、スタイルを再利用できるようにカスタムUIを変更しています。iOS VoiceOverボタンがターゲットメソッドを呼び出さない
- (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;
}
そしてACTLanguageボタンのスーパーをインスタンス化しているUIViewの中:
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];
そして、メソッド「onLanguages」自体のサブクラスでは、私は、アクセシビリティに関連する次のコードを持っています
- (void)onLanguages {
[self.languagePopupView showWithCallback:nil];
}
ボタンアクションは、VoiceOverのは、(通常のタップに使用)を有効に完璧にせずに動作します:ちょうどモーダルのUIViewの上に表示されるポップアップビューを示しています。さらに、アクセシビリティインスペクタをOS Xでシミュレータで使用すると、アクションはうまく実行されます。
実際のデバイス(9.3を実行しているiPhone 5でテスト)では、 "onLanguages"メソッドが呼び出されることはありません。アクセシビリティラベル、ヒント、および特性は正しく読み込まれていますが、要素をうまく収めることができますが、ダブルタップは「onLanguages」メソッドを期待どおりにトリガーしません。
アイデア?
これは鮮やかでした。私は[self sendActionsForControlEvents:UIControlEventTouchUpInside]を呼び出すためにそれを打ち消しました。それはすぐに働いた。本当にありがとう! – AlexKoren