我有一个UISwitch
内部 tableviewcell。切换发出网络请求。AUIActivityIndicator
替换开关,直到响应完成。所以UX流程是这样的:
off --> loader --> on
在点击标签之前,可访问性如下所示:
label - value - hint
‘streaming - switch button off - double tap to toggle switch’
我的代码是这样的:
@IBAction func switchToggled(_ sender: Any) {
toggle.isHidden = true
activityIndicatorView.startAnimating()
UIAccessibility.post(notification: .layoutChanged, argument: activityIndicatorView)
我还禁用了单元格本身的可访问性。
问题是可访问性将如下所示:
$switchValue - activityIndicatorLabel-activityIndicatorValue - switchLabel switchValue
off - streaming - in progress - streaming - switch button on
我不确定为什么在我将切换开关设置isHidden
为true
并发布辅助功能通知后,辅助功能仍然会读取 ♂️</p>
我想从上面省略☝️并让它这样读:
$activityIndicatorLabel-activityIndicatorValue - switchLabel switchValue
streaming - in progress - streaming - switch button on
FWIW
UIAccessibility.post(notification: .screenChange, argument: activityIndicatorView)
获得所需的语音序列,但随后会产生新问题。那就是我听到“哔哔”的声音,这会使用户误以为他们在新屏幕中。
这个通知移动到正确的项目,而另一个没有,这很奇怪。我本来希望两者都会创建相同的订单,但他们不会
编辑:
我已经研究了如何在 Voiceover 说话时停止 Text to Speech,或者在 Swift 中反之亦然?
我正在观察UIAccessibilityElementFocusedNotification
通知。我在userInfo
.
▿ Optional<Dictionary<AnyHashable, Any>>
▿ some : 3 elements
▿ 0 : 2 elements
▿ key : AnyHashable("UIAccessibilityFocusedElementKey")
- value : "UIAccessibilityFocusedElementKey"
- value : <UIActivityIndicatorView: 0x113b59350; frame = (794 20; 24 24); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x2811a91e0>>
▿ 1 : 2 elements
▿ key : AnyHashable("UIAccessibilityAssistiveTechnologyKey")
- value : "UIAccessibilityAssistiveTechnologyKey"
- value : UIAccessibilityNotificationVoiceOverIdentifier
▿ 2 : 2 elements
▿ key : AnyHashable("UIAccessibilityUnfocusedElementKey")
- value : "UIAccessibilityUnfocusedElementKey"
- value : <MyModule.MySwitch: 0x113b59540; baseClass = UISwitch; frame = (769 16.5; 51 31); hidden = YES; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x2811a9120>>
有两件事我不知道如何解决。
- 这三个事件并没有按顺序进行。它只是一个包含所有三个的通知。我想取消配音,因为开关没有焦点。我不希望人们阅读它。
- 答案仍然没有解释如何取消不需要的配音。