我在UIMenuController中创建了一个自定义UIWebView,但此后似乎摆脱了UIMenuController中的“说话选择”选项。语音选择选项已在所有测试设备的“首选项”中打开,并出现在其他应用程序中,包括非Apple应用程序。是否有我可以调用的无障碍服务或sharedMenuController的一部分以获得此物品?

UIMenuItem *copyMenuItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Copy", @"Copy menu item") action:@selector(myappCopy:)];

UIMenuItem *highlightMenuItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Highlight", @"Highlight menu option") action:@selector(myappHighlight:)];

UIMenuItem *unhighlightMenuItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Remove Highlight", @"Remove Highlight menu option")
                                                           action:@selector(myappRemoveHighlight:)];

UIMenuItem *noteMenuItem = [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"Note", @"Note menu options") action:@selector(myappNote:)];

[UIMenuController sharedMenuController].menuItems = [NSArray arrayWithObjects:copyMenuItem, highlightMenuItem, unhighlightMenuItem, noteMenuItem, nil];

[copyMenuItem release];
[highlightMenuItem release];
[unhighlightMenuItem release];
[noteMenuItem release];

我什至在一开始就试图解析现有的共享菜单项,但是我看不到日志中有任何转储的内容。该方法在应用启动时被调用。

在方法顶部尝试过此操作:
    for (UIMenuItem *menuItem in [UIMenuController sharedMenuController].menuItems) {
        NSLog(@"title: %@", menuItem.title);
        NSLog(@"action: %@", menuItem.action);
    }

任何帮助深表感谢!谢谢-埃里克

最佳答案

我发现了这个bug的一些有趣的事情。基本上,启用语音选择后,在进行第一个选择后,UIMenuController就会清空menuItems。该解决方案虽然很hacky,但很简单。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
NSString *selectorString = NSStringFromSelector(action);
BOOL isAccessibilitySelector = [selectorString isEqualToString:@"_accessibilitySpeak:"] || [selectorString isEqualToString:@"_accessibilityPauseSpeaking:"];
if (isAccessibilitySelector && [super canPerformAction:action withSender:sender]) {
    //(re)add menuItems to UIMenuController
    return YES;
}
return NO;

}

我应该注意,您必须在调用menuItems后重新添加canPerformAction...()

我以雷达:12931434的身份提交了此文件。更新:DUP已添加到13060693

关于iphone - 将语音添加到自定义UIMenuController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9879956/

10-09 09:39