2017-09-22 3 views
0

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」メソッドを期待どおりにトリガーしません。

アイデア?

答えて

1

この作業を実現する簡単な方法は、acccessibilityActivate()を実装し、そこからonLanguages()を呼び出すことです。

+0

これは鮮やかでした。私は[self sendActionsForControlEvents:UIControlEventTouchUpInside]を呼び出すためにそれを打ち消しました。それはすぐに働いた。本当にありがとう! – AlexKoren

関連する問題