UITextField:右侧视图辅助功能(VoiceOver)

7
我在UITextField的右视图中添加了两个UIButton,但是VoiceOver无法看到它们(它仅“读取”包含视图)。我已经将右视图的accessibilityElementsHidden设置为“否”。我不明白我做错了什么... 编辑:我正在子类化UITextField,可能与此有关?

这是一个UITextField属性:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/#//apple_ref/occ/instp/UITextField/rightView - Luciano
1
你有没有找到这个问题的答案?我也遇到了同样的问题。 - imLanky
1个回答

1
// MARK: - VoiceOver handling
extension MyTextField {
    public var voiceOverElements: [UIAccessibilityElement] {
        guard UIAccessibility.isVoiceOverRunning else {
            return []
        }
        let element: UIAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
        let rect: CGRect = UIAccessibility.convertToScreenCoordinates(frame, in: self)
        element.accessibilityFrame = rect
        var result: [UIAccessibilityElement] = subviews.filter { $0 is UIButton }
            .map {
                let element: UIAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
                let rect: CGRect = UIAccessibility.convertToScreenCoordinates($0.frame, in: self)
                element.accessibilityFrame = rect
                return element
            }
        result.insert(element, at: 0)
        return result
    }

    public override class func isAccessibilityElement() -> Bool {
        false
    }

    public override func accessibilityElement(at index: Int) -> Any? {
        voiceOverElements[index]
    }

    public override func accessibilityElementCount() -> Int {
        voiceOverElements.count
    }

    public override func index(ofAccessibilityElement element: Any) -> Int {
        guard let element = element as? UIAccessibilityElement,
              let toRet = voiceOverElements.firstIndex(of: element) else {
            return 0
        }
        return toRet
    }
}

你应该重写UIAccessibleContainer方法,以便获取子视图的可访问框架。在这种情况下,我只获取按钮,但你可以省略它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接