如何使UISearchBar的书签图标可访问?

时间:2013-03-22 14:44:20

标签: ios objective-c uisearchbar voiceover uiaccessibility

我正在努力改善应用中的Voice Over支持。我有UISearchBar。我已将showBookMarks属性设置为YES。我已经设置了一个自定义图像:

[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];

我遇到的问题是,启用Voice Over后,无法激活书签图标。如果我输入文本,则会出现“清除”图标,可以按预期选择并激活它。但是一旦文本被清除并且我的书签图标出现,就无法选择它。无论我在哪里点击,Voice Over矩形始终围绕整个搜索栏,包括图标。

我尝试在accessibilityLabel上为图标设置accessibilityTraitsUIImage属性。我已将UIImage的{​​{1}}属性设置为isAccessibilityElement。似乎没什么用。

是否有人知道在YES可访问的书签图标需要哪些步骤?

以下是搜索栏的完整代码:

UISearchBar

其他信息:

我应该提一下,搜索栏与UISearchBar *bar = [[UISearchBar alloc] init]; [bar sizeToFit]; bar.autoresizingMask = UIViewAutoresizingFlexibleWidth; bar.placeholder = @"Search listed items"; bar.autocapitalizationType = UITextAutocapitalizationTypeNone; bar.autocorrectionType = UITextAutocorrectionTypeNo; bar.keyboardType = UIKeyboardTypeDefault; bar.showsBookmarkButton = YES; bar.text = @""; UIImage *icon = [UIImage imageNamed:@"bookmarks.png"]; icon.accessibilityLabel = @"Bookmarks"; icon.accessibilityTraits = UIAccessibilityTraitButton; icon.isAccessibilityElement = YES; [bar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal]; [bar setPositionAdjustment:UIOffsetMake(-1, -1) forSearchBarIcon:UISearchBarIconBookmark]; 一起使用,该UITableViewControllerUISearchDisplayController相关联。搜索栏被设置为表格视图的headerView

所有这些都是在代码中完成的。不涉及故事板或xib。

2 个答案:

答案 0 :(得分:5)

经过一堆调试后,我找到了答案。为了使Voice Over能够识别UISearchBar书签图标的自定义图标,该图标的大小必须正确。

使用的图像必须为40x29px(视网膜版本为80x58px)。任何其他尺寸和图标都无法被Voice Over识别。

我的图像是38x31px(和68x62px)。

我在原始问题中发布的代码都是正确的。一旦图像大小更新,一切都开始按预期工作。代码中唯一的变化就是删除了不再需要的setPositionAdjustment:forSearchBarIcon:调用。

我无法想象为什么图标大小的微小差异会导致Voice Over使用自定义图标而不能正常工作。但它确实如此。我希望这有助于将来的某个人。

答案 1 :(得分:1)

我在您的问题中运行了代码,并且书签按钮似乎可以通过VoiceOver访问。

enter image description here

还有其他东西会干扰您的界面吗?任何不可见的视图可能会在书签按钮上找到它们的方式?你在设置自定义清除按钮吗?您可以提供的任何其他详细信息吗?

然而,它确实没有使用你传递它的accessibilityLabel;它只是使用“按钮”,这很糟糕。我说它可能是UIKit中的一个错误 - 你应该file a bug