Latest 1.2.1
License MIT
Platforms ios 9.0

[CI Status]( Fomenko/VFKeyboardObserver)

A simple way to observe keyboard notifications and keyboard properties.


  1. Start / stop observing keyboard events.

// Create new observer, or use shared instance
[[VFKeyboardObserver sharedKeyboardObserver] start];
[[VFKeyboardObserver sharedKeyboardObserver] stop];
  1. Add / remove delegates

Adopt to VFKeyboardObserverDelegate protocol and add an object as a delegate.

VFKeyboardObserver can have any number of delegates. Delegates are not retained.

@protocol VFKeyboardObserverDelegate <NSObject>


- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardWillShowWithProperties:(VFKeyboardProperties)keyboardProperties interfaceOrientationWillChange:(BOOL)interfaceOrientationWillChange;
- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardDidShowWithProperties:(VFKeyboardProperties)keyboardProperties;

- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardWillHideWithProperties:(VFKeyboardProperties)keyboardProperties;
- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardDidHideWithProperties:(VFKeyboardProperties)keyboardProperties;


[[VFKeyboardObserver sharedKeyboardObserver] addDelegate:aDelegate];
[[VFKeyboardObserver sharedKeyboardObserver] removeDelegate:aDelegate];
  1. Update UI when keyboard appears / disappears

It is common to update UI when keyboard will appear / will disappear.

- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardWillShowWithProperties:(VFKeyboardProperties)keyboardProperties interfaceOrientationWillChange:(BOOL)interfaceOrientationWillChange {
    [keyboardObserver animateWithKeyboardProperties:^{
        // ...

- (void)keyboardObserver:(VFKeyboardObserver *)keyboardObserver keyboardWillHideWithProperties:(VFKeyboardProperties)keyboardProperties {
    [keyboardObserver animateWithKeyboardProperties:^{
        // ...

VFKeyboardObserver have convenient method animateWithKeyboardProperties: that performs animations synched with keyboard animation.

  1. Rotation

If we animate our UI to adjust it to keyboard, for example, attach UITextField to the top of the keyboard, there is one problem when interface orientation changes. Our UITextField does not stay attached while the rotation of interface orientation is animated.
See this for details:

To solve this problem, VFKeyboardObserver has interfaceOrientationWillChange method.
Call it from UIViewController’s viewWillTransitionToSize:withTransitionCoordinator:.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    [[VFKeyboardObserver sharedKeyboardObserver] interfaceOrientationWillChange];

In this case, (only while interface orientation changes):

  • VFKeyboardObserverDelegate will receive only two messages: keyboardWillShow and keyboardDidShow (hide methods will be ignored).
  • interfaceOrientationWillChange argument of keyboardWillShow delegate method will be YES, so in case of custom UI adjusting animations in this method, you can do it without animation
  • animateWithKeyboardProperties: methods automatically perform animations and completion blocks without animation (if you use it, no changes needed).



VFKeyboardObserver is available through CocoaPods. To install
it, simply add the following line to your Podfile:

pod "VFKeyboardObserver"


Valery Fomenko, [email protected]


VFKeyboardObserver is available under the MIT license. See the LICENSE file for more info.

Latest podspec

    "name": "VFKeyboardObserver",
    "version": "1.2.1",
    "summary": "A simple way to observe keyboard notifications and keyboard properties.",
    "homepage": "",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "authors": {
        "Valery Fomenko": "[email protected]"
    "source": {
        "git": "",
        "tag": "1.2.1"
    "platforms": {
        "ios": "9.0"
    "source_files": "VFKeyboardObserver/Classes/**/*"

Pin It on Pinterest

Share This