首页 文章

iOS VoiceOver按钮未调用目标方法

提问于
浏览
0

我有一个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 回答

  • 1

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

相关问题