diff --git a/src/plugins/platforms/ios/qiosmenu.mm b/src/plugins/platforms/ios/qiosmenu.mm
index f64c1a2f418437978ce6b502967ef2f4664216c0..0f351f785b83116a213a45faecdee353da875fbe 100644
--- a/src/plugins/platforms/ios/qiosmenu.mm
+++ b/src/plugins/platforms/ios/qiosmenu.mm
@@ -153,13 +153,29 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
         [self setDelegate:self];
         [self setDataSource:self];
         [self selectRow:m_selectedRow inComponent:0 animated:false];
+        [self listenForKeyboardWillHideNotification:YES];
     }
 
     return self;
 }
 
+-(void)listenForKeyboardWillHideNotification:(BOOL)listen
+{
+    if (listen) {
+        [[NSNotificationCenter defaultCenter]
+            addObserver:self
+            selector:@selector(cancelMenu)
+            name:@"UIKeyboardWillHideNotification" object:nil];
+    } else {
+        [[NSNotificationCenter defaultCenter]
+            removeObserver:self
+            name:@"UIKeyboardWillHideNotification" object:nil];
+    }
+}
+
 -(void)dealloc
 {
+    [self listenForKeyboardWillHideNotification:NO];
     self.toolbar = 0;
     [super dealloc];
 }
@@ -193,6 +209,7 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
 
 - (void)closeMenu
 {
+    [self listenForKeyboardWillHideNotification:NO];
     if (!m_visibleMenuItems.isEmpty())
         QIOSMenu::currentMenu()->handleItemSelected(m_visibleMenuItems.at(m_selectedRow));
     else
@@ -201,6 +218,7 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
 
 - (void)cancelMenu
 {
+    [self listenForKeyboardWillHideNotification:NO];
     QIOSMenu::currentMenu()->dismiss();
 }