设想:
- 包含各种视图、按钮的主机 UIViewController;和导航栏。
- 用户选择一个显示依赖 UIViewController 的项目。
- 用户最终会关闭呈现的 UIViewController。
目标:
VoiceOver 焦点必须返回到其容器视图中的原始按钮(见下面的红色箭头),而不是默认的导航返回箭头“<”。
模拟模型
我试图通过创建情境的骨架模型来简化问题。
原始代码是用 Objective-C 编写的。
我的骨架是用 Swift 编写的。
这是我的模拟主机 UIViewController 及其容器视图中的目标按钮(原点)。
它在我的 iPhone 6s Plus 上以 VoiceOver 模式运行。它即将显示其呈现的 VC:
[![在此处输入图片描述][1]][1]
这是呈现的 UIViewController:
这是绿色 HOST 视图控制器的代码片段:
class ThirdViewController: UIViewController {
...
@IBOutlet var containerView: UIView!
...
@IBOutlet var doSomethingButton: UIButton!
// Toolbar Items:
@IBOutlet var presentVCButton: UIBarButtonItem!
...
override func viewDidLoad() {
super.viewDidLoad()
title = "Third ViewController"
setupNotification()
// Setup Accessibility:
setupNotificationAccessibility()
setupContainerAccessibility()
setupDoSomethingAccessibility()
setupToolbarItemsAccessibility()
}
...
// Present View Controller:
@IBAction func displayPanelAction(_ sender: UIBarButtonItem) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let popupVC = storyboard.instantiateViewController(withIdentifier: "popupVC") as? PopUpViewController {
popupVC.delegate = self
present(popupVC, animated: true)
}
}
...
// NOTE: If containerView.isAccessibilityElement = true,
// then containerView's member items are NOT ACCESSIBLE.
fileprivate func setupContainerAccessibility() {
containerView.isAccessibilityElement = false
containerView.accessibilityLabel = "The Container"
containerView.accessibilityHint = "Meredith thinks you're attractive!"
}
fileprivate func setupDoSomethingAccessibility() {
doSomethingButton.accessibilityHint = "I actually don't do anything."
}
这是弹出视图控制器的代码片段:
// ------------------------------------------------
// From 'X' Icon:
@IBAction func exitAction(_ sender: UIButton) {
guard let sender = delegate else { return }
sender.accessibilityElements = [sender.doSomethingButton!]
dismiss(animated: true, completion: nil)
}
两个问题:
如何强制聚焦并让 VoiceOver 重复来源的标签(在本例中为“做某事”按钮)?
在最初的情况下,原点是一个 UIView,它的点击手势动作与一个 UIButton 相比。是否可以强制关注不同 UIViewController 的 UIView 和 UIButton?