辅助功能:更新 UIAlertView 消息时,Voiceover 读取的文本不会改变?

Posted

技术标签:

【中文标题】辅助功能:更新 UIAlertView 消息时,Voiceover 读取的文本不会改变?【英文标题】:Accessibility: On updating UIAlertView's message, the text that Voice over reads does not change? 【发布时间】:2013-01-24 08:34:30 【问题描述】:

请参考以下代码:

UIAlertView *progressAlertView = [[UIAlertView alloc] 
                                  initWithTitle:@"Title"
                                  message:@"Message"  
                                  delegate:self 
                                  cancelButtonTitle:@"Cancel"
                                  otherButtonTitles:nil];


progressAlertView.message=@"Hello, I am the new one";

旁白总是读取“消息”,而从不读取第二行“你好,我是新消息”中设置的新消息字符串。无法更改 UIAlertView 的 bodyTextLabel 控件/子视图的此可访问性标签。

知道如何让 UIAlertView 在分配后更改其可访问性标签吗?

谢谢,

-希尔皮

【问题讨论】:

【参考方案1】:

您可以使用 accessibilityTraits 作为 UIAccessibilityTraitUpdatesFrequently 来阅读更新的消息。 它的工作原理是:

alertObj.accessibilityTraits =   UIAccessibilityTraitUpdatesFrequently;

谢谢

【讨论】:

【参考方案2】:

用这种方式设置UIAlertView

的消息
UIAlertView *progressAlertView = [[UIAlertView alloc] 
                                  initWithTitle:@"Title"
                                  message:@"Message"  
                                  delegate:self 
                                  cancelButtonTitle:@"Cancel"
                                  otherButtonTitles:nil];


[alertView setMessage:@"Hello, I am the new one"];
[alertView show];

有关 UIAlertView 的更多信息,请参阅此 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html

【讨论】:

我已经阅读了您上面提到的文档。供您参考 alertView.message=@"abc" 和 [alertView setMessage:@"abc"];是一样的。【参考方案3】:

您可以更改UIAlertView 的子视图以更改可访问性标签等单个属性:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test"
                                                message:@"Message"
                                               delegate:nil
                                      cancelButtonTitle:@"Ok"
                                      otherButtonTitles:nil];

// In a standard UIAlertView there are 2 UILabels and some buttons
// The UILabel with the message is always the 2nd object in the array
NSArray *subviews = alert.subviews;
UILabel *messageLabel = [subviews objectAtIndex:1];
[messageLabel setAccessibilityLabel:@"Some other text"];

使用此代码,您只需更改辅助功能标签,以便 VoiceOver 读取另一个文本但显示旧文本。

在您的情况下,您应该将可访问性标签设置为与您要设置UIAlertView 的消息相同。

【讨论】:

Apple 不推荐访问内部视图,事实上,如果您使用这样的东西,可能会拒绝您的应用程序。 Apple Bug ID# 13095288 已被记录以跟踪此问题

以上是关于辅助功能:更新 UIAlertView 消息时,Voiceover 读取的文本不会改变?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中显示之后/期间更新 UIAlertView 消息

应用访问地图服务时系统弹出UIAlertView,可以更改UIAlertView的消息吗?

UIAlertView 在启动时导致警告消息

单击广告时,WKWebView 没有响应。控制台消息:[辅助功能] WKContentView

自定义 UIAlertView,委托上的消息更改

提示窗UIAlertView与UIAlertController的用法(持续更新中)