iOS Voiceover status

2019-03-09 05:54发布

问题:

I am trying to add accessibility features to an iOS app that has already been developed.

There are a couple of UI features (e.g. buttons) that I like them to show up if the VoiceOver option in the accessibility menu of the iPhone settings is on and do not show up if the voiceover is off.

Is there a way to check whether the voiceover option is on or not?

回答1:

BOOL UIAccessibilityIsVoiceOverRunning();


回答2:

In ViewDIdLoad

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(voiceOverStatusChanged)
                                             name:UIAccessibilityVoiceOverStatusChanged
                                           object:nil];


- (void)voiceOverStatusChanged
{
    if(!UIAccessibilityIsVoiceOverRunning())
    {
        //do your changes
    }
}


回答3:

For Swift 4.2, you can check the following boolean provided by UIKit:

UIAccessibility.isVoiceOverRunning



回答4:

As a supplement to all the previous correct answers, since iOS11, the new notification name to be used is :

  • UIAccessibilityVoiceOverStatusDidChange (SWIFT < 4.2).
  • UIAccessibilityVoiceOverStatusDidChangeNotification (ObjC).

... while UIAccessibilityVoiceOverStatusChanged is deprecated.

EDIT for SWIFT 4.2 ==> UIAccessibility.voiceOverStatusDidChangeNotification