Боковое меню и открытая клавиатура

Столкнулся с проблемой, что боковое меню (MMDrawerController) при открытии оставляет открытую клавиатуру. Это конечно не проблема меню, но повозиться пришлось.

Существует несколько вариантов скрыть клавиатуру в iOS. Вся их идея заключается в том, чтобы снять так называемый фокус с объекта, который этот фокус поддерживает. Первый способ это вызвать соответствующий метод.

textField.resignFirstResponder()

Для вызова этого метода нужно знать соответствующий testField (или другой объект, являющимся в фокусе). Второй способ вызвать метод endEditing у UIView, которая содержит объект в фокусе.

view.endEditing(true)

В случае с открытием меню, само меню должно закрывать клавиатуру. При этом, не хотелось бы чтобы меню что-то знало о других объектах. К счастью есть чудесное уведомление:

UIApplication.sharedApplication().sendAction(“resignFirstResponder”, to: nil, from: nil, forEvent: nil)

Это системное уведомление, которое отправляет информацию о том, что необходимо таки закрыть клавиатуру. Далее, для меню необходимо отправить это уведомление в двух случаях: при открытии по кнопке и при открытии жестом. При открытии по кнопке нужно просто добавить вызов в обработчик кнопки. Для добавления логики при использовании жестов необходимо определить gestureCompletionBlock.

self.drawerController.gestureCompletionBlock = {(controller, recognizer) -> Void in
    UIApplication.sharedApplication().sendAction(“resignFirstResponder”, to: nil, from: nil, forEvent: nil)
}

Комментарии

comments powered by Disqus