Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何制作UISearchBar';书签图标是否可访问?_Ios_Objective C_Uisearchbar_Voiceover_Uiaccessibility - Fatal编程技术网

Ios 如何制作UISearchBar';书签图标是否可访问?

Ios 如何制作UISearchBar';书签图标是否可访问?,ios,objective-c,uisearchbar,voiceover,uiaccessibility,Ios,Objective C,Uisearchbar,Voiceover,Uiaccessibility,我正在尝试改进应用程序中的语音支持。我有一个ui搜索栏。我已将showBookMarks属性设置为YES。我用以下设置了一个自定义图像: [searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal]; 我遇到的问题是,打开画外音后,无法激活书签图标。如果我输入文本,“清除”图标出现,可以按预期选择和激活。但一旦文本被清除,我的书签图标出现,它就不能被选中。无论我点击哪里

我正在尝试改进应用程序中的语音支持。我有一个
ui搜索栏
。我已将
showBookMarks
属性设置为
YES
。我用以下设置了一个自定义图像:

[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
我遇到的问题是,打开画外音后,无法激活书签图标。如果我输入文本,“清除”图标出现,可以按预期选择和激活。但一旦文本被清除,我的书签图标出现,它就不能被选中。无论我点击哪里,画外音矩形始终围绕着整个搜索栏,包括图标

我已尝试在图标的
UIImage
上设置
accessibilityLabel
accessibilityTraits
属性。我已将
UIImage
isAccessibilityElement
属性设置为
YES
。似乎什么都不管用

有人知道需要哪些步骤才能访问
ui搜索栏中的书签图标吗

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

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];
其他信息:

我应该提到,搜索栏与
UITableViewController
一起使用,它与
UISearchDisplayController
相连。搜索栏被设置为表视图的
headerView


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

我已经运行了您问题中的代码,书签按钮似乎可以通过画外音访问

是否有其他东西干扰了您的界面?是否有任何不可见的视图显示在书签按钮上方?您正在设置自定义清除按钮吗?您还可以提供其他详细信息吗


但是,确实,您传递它的不是使用
accessibilityLabel
;它只是使用“按钮”,这很糟糕。我认为这可能是UIKit中的一个bug——你应该这么做

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

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

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

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


我无法想象为什么图标大小的微小差异会是使用自定义图标和不使用图标之间的差异。但它在那里。我希望这对将来的人有所帮助。

谢谢。我忽略了一件事(我将很快更新我的问题),那就是搜索栏正在与
UITableViewControler
UISearchDisplayController
一起使用。搜索栏被设置为表视图的
headerView
。我想我需要创建一个新项目,一次添加一个项目,然后看看是什么让它停止工作。好主意-可能是
UITAbleViewController
中的某个东西干扰了画外音。你真的为搜索栏设置了自定义图标吗?我创建了一个简单的测试项目。如果使用默认书签图标,则可以访问图标按钮。但一旦我应用自己的自定义书签图标,它就不再可访问。@downvoter请解释downvote。我贴出了我遇到的问题的确切答案。这是使Voice Ovet在此情况下正常工作的未记录要求。请解释您在哪里发现UISearchBarIconBookmark大小应为40x29px?它是最小尺寸、最大尺寸、精确尺寸还是精确比例?我能让它与其他尺寸的衣服搭配使用,但我不知道哪一种是推荐的。我通过反复试验找到了它。我原来的尺码不合适。当我尝试指定的大小时,它开始工作。我没有测试其他的组合,所以肯定有可能其他尺寸的组合也可以。如果你知道其他尺码的衣服也有用,请把它们贴出来,这样其他人可以从中受益。