Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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 UIAccessibilityNotification问题_Ios_Swift_Accessibility_Voiceover - Fatal编程技术网

Ios UIAccessibilityNotification问题

Ios UIAccessibilityNotification问题,ios,swift,accessibility,voiceover,Ios,Swift,Accessibility,Voiceover,我对iOS易访问性领域非常陌生,我正在尝试使用UIAccessibilityNotification功能,但它并没有像我想象的那样工作。我用一个按钮编写了一个非常简单的应用程序,当你点击按钮时,这个方法被调用 - (IBAction)announce:(id)sender { UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"

我对iOS易访问性领域非常陌生,我正在尝试使用UIAccessibilityNotification功能,但它并没有像我想象的那样工作。我用一个按钮编写了一个非常简单的应用程序,当你点击按钮时,这个方法被调用

- (IBAction)announce:(id)sender {
    UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,
                                @"Speak this out loud");
}
据我所知,当你点击按钮时,画外音会显示“大声说出来”,但它会显示按钮名称。有谁能告诉我代码有什么问题,或者为什么我用错了

为了弄清楚,我双击了按钮。当你点击按钮时,它会读取按钮名称和特征(“按钮”),当你双击它时,它只会读取按钮名称

感谢@ChrisCM的回答。推迟宣布会使它生效

@IBAction func announce(sender: AnyObject) {
    let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))

    dispatch_after(dispatchTime, dispatch_get_main_queue(), {
         UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Item added to cart")
    })
}

但这里仍然有一个小问题,单击“添加到购物车”按钮后,画外音将指向第一个可访问的项目,即后退按钮,并读取“后退按钮”,然后读取announcementNotification参数

您对通知如何工作的理解是正确的,但是您对voiceover如何处理基本交互的理解是错误的。当您发布公告时,它会启动,但会立即被对ui交互的标准画外音响应中断,即宣布所按内容的可访问性标签。在充分延迟后发布您的公告,或者基本上基于除点击之外的任何内容

关于问题的第二部分(第一个可访问性问题是重点)。这可能是因为正在进行某些屏幕重新绘制,因此视图绘制继承人正在发布固有的
UIAccessibilityScreenChangedNotification
。您应该通过自己发布此通知,使用您希望突出显示的元素来覆盖此通知。可能是启动屏幕更改的元素,也可能是由于此交互而添加的新内容。

基于ChrisCM,实现了以下功能:

if UIAccessibility.isVoiceOverRunning {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "message")
    }
}

在设备上启用辅助功能(画外音)时,您需要双击一个按钮来执行其操作。@rmaddy感谢您的回复!是的,我双击了按钮,但它读取的是按钮的名称,而不是我传递给postNotification方法的参数:(你不应该“进化”问题。添加新的澄清内容是可以的,但是如果您已经解决了最初提出的问题,并且导致了新问题,那么您应该接受答案并提出新问题。感谢您的回答!我在那里延迟了一段时间,它正在工作!只是想知道是否可以禁用对ui交互的特定标准画外音响应?我在收到反馈之前再次听到按钮名称有点奇怪,谢谢!不,你不能。你应该更新你的代码,这样我们可以看到你是如何发布延迟的。下面是一个关于如何添加延迟的好帖子: