iOS VoiceOver按钮未调用目标方法

时间:2017-09-22 18:03:14

标签: ios objective-c uibutton accessibility voiceover

我有一个UIButton子类,ACTLanguageButton,它只是做一些自定义UI更改,以便我可以重用该样式。在子类中,我有以下与可访问性相关的代码:

- (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;
}

在实例化的UIView中,它是ACTLanguage Button的超级视图:

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"本身只是显示一个弹出视图,在UIView上显示模态:

- (void)onLanguages {
    [self.languagePopupView showWithCallback:nil];
}

按钮动作可在没有启用VoiceOver的情况下完美运行(正常点击使用)。此外,当我在OS X上使用模拟器上的辅助功能检查器时,操作也可以正常执行。

在真实设备上(在运行9.3的iPhone 5上进行测试)," onLanguages"方法永远不会被调用。可以正确读取辅助功能标签,提示和特征,我可以很好地聚焦元素,但是双击不会触发" onLanguages"按预期的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

实现这一目标的简单方法是实施acccessibilityActivate()并从那里调用onLanguages()