Sunday, April 22, 2012

How to programatically check whether a keyboard is present in iphone app?


I need to check condition is keyboard appearing, in my iphone app.



like:




if(keyboardIsPresentOnWindow) {
//Do action 1
}
else if (keyboardIsNotPresentOnWindow) {
//Do action 2
}



So please help how to check this condition?



Thanks.


Source: Tips4all

3 comments:

  1. drawnonward's code is very close, but collides with UIKit's namespace and could be made easier to use.

    @interface KeyboardStateListener {
    BOOL _isVisible;
    }
    + (KeyboardStateListener *)sharedInstance;
    @property (nonatomic, readonly, getter=isVisible) BOOL visible;
    @end

    static KeyboardStateListener *sharedInstance;

    @implementation KeyboardStateListener

    + (KeyboardStateListener *)sharedInstance
    {
    return sharedInstance;
    }

    + (void)load
    {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    sharedInstance = [[self alloc] init];
    [pool release];
    }

    - (BOOL)isVisible
    {
    return _isVisible;
    }

    - (void)didShow
    {
    _isVisible = YES;
    }

    - (void)didHide
    {
    _isVisible = NO;
    }

    - (id)init
    {
    if ((self = [super init])) {
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(didShow) name:UIKeyboardDidShowNotification object:nil];
    [center addObserver:self selector:@selector(didHide) name:UIKeyboardWillHideNotification object:nil];
    }
    return self;
    }

    @end

    ReplyDelete
  2. create a UIKeyboardListener when you know the keyboard is not visible, for example by calling [UIKeyboardListener shared] from applicationDidFinishLaunching.

    @implementation UIKeyboardListener

    + (UIKeyboardListener) shared {
    static UIKeyboardListener sListener;
    if ( nil == sListener ) sListener = [[UIKeyboardListener alloc] init];

    return sListener;
    }

    -(id) init {
    self = [super init];

    if ( self ) {
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(noticeShowKeyboard:) name:UIKeyboardDidShowNotification object:nil];
    [center addObserver:self selector:@selector(noticeHideKeyboard:) name:UIKeyboardWillHideNotification object:nil];
    }

    return self;
    }

    -(void) noticeShowKeyboard:(NSNotification *)inNotification {
    _visible = true;
    }

    -(void) noticeHideKeyboard:(NSNotification *)inNotification {
    _visible = false;
    }

    -(BOOL) isVisible {
    return _visible;
    }

    @end

    ReplyDelete
  3. I think you need to use the notifications that are provided about the keyboard:

    From: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html


    Keyboard Notifications

    When the system shows or hides the
    keyboard, it posts several keyboard
    notifications. These notifications
    contain information about the
    keyboard, including its size, which
    you can use for calculations that
    involve moving views. Registering for
    these notifications is the only way to
    get some types of information about
    the keyboard. The system delivers the
    following notifications for
    keyboard-related events:

    * UIKeyboardWillShowNotification
    * UIKeyboardDidShowNotification
    * UIKeyboardWillHideNotification
    * UIKeyboardDidHideNotification


    For more information about these
    notifications, see their descriptions
    in UIWindow Class Reference. For
    information about how to show and hide
    the keyboard, see Text and Web.

    ReplyDelete