diff --git a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm index 1dcdbbf0f9..5d646d9f3c 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm @@ -210,9 +210,10 @@ private: addMethod (@selector (accessibilityElementIsFocused), isFocused, "c@:"); addMethod (@selector (accessibilityViewIsModal), getIsAccessibilityModal, "c@:"); - addMethod (@selector (accessibilityActivate), accessibilityPerformActivate, "c@:"); - addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:"); - addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:"); + addMethod (@selector (accessibilityActivate), accessibilityPerformActivate, "c@:"); + addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:"); + addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:"); + addMethod (@selector (accessibilityPerformEscape), accessibilityPerformEscape, "c@:"); #if JUCE_IOS_CONTAINER_API_AVAILABLE if (@available (iOS 11.0, *)) @@ -408,6 +409,26 @@ private: return NO; } + static BOOL accessibilityPerformEscape (id self, SEL) + { + if (auto* handler = getHandler (self)) + { + if (auto* modal = Component::getCurrentlyModalComponent()) + { + if (auto* modalHandler = modal->getAccessibilityHandler()) + { + if (modalHandler == handler || modalHandler->isParentOf (handler)) + { + modal->exitModalState (0); + return YES; + } + } + } + } + + return NO; + } + static id getAccessibilityDataTableCellElementForRowColumn (id self, SEL, NSUInteger row, NSUInteger column) { if (auto* tableInterface = getTableInterface (self))