accessibilityElementDidBecomeFocused不要被调用

Dav*_*vao 0 iphone ios voiceover uiaccessibility swift

如果某个元素专注于画外音,我会尝试获取信息。因此,我重写了该accessibilityElementDidBecomeFocused方法,但这从未被调用。我忘记了什么吗?

override func viewDidLoad() {
    super.viewDidLoad()        
    viewArray.append(UIView())
    viewArray.append(UIView())        
    viewArray[0].frame = CGRectMake(20, 210, 100, 100)
    viewArray[0].isAccessibilityElement = true
    self.view.addSubview(viewArray[0])

    viewArray[1].frame = CGRectMake(220, 220, 100, 100)
    viewArray[1].isAccessibilityElement = true
    self.view.addSubview(viewArray[1])

}

//never called
override func accessibilityElementDidBecomeFocused(){
    println("accessibilityElementDidBecomeFocused")
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ist 6

因为您的视图控制器不是可访问性元素,所以未调用它。您应该在自定义视图子类中覆盖它。

需要澄清的是:只要可访问性元素成为焦点,您就不会获得该回调,但是当元素变为强制时元素本身将获得该回调。

可以覆盖它的原因(UIViewController实现它的原因)是因为它是一个非正式协议,是在NSObject上实现的类别,意味着每个NSObject都实现这些方法。