如何以编程方式检查iOS应用中是否存在键盘?

我需要在我的iOS应用程序中检查键盘可见性的状况。

伪代码:

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

我如何检查这种情况?


drawnonward的代码非常接近,但与UIKit的命名空间相冲突,并且可以更容易使用。

@interface KeyboardStateListener : NSObject {
    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

...或采取简单的方法:

当你输入一个文本字段时,它会成为第一个响应者,并出现键盘。 您可以使用[myTextField isFirstResponder]检查键盘的状态。 如果它返回YES ,那么键盘处于活动状态。


我认为你需要使用关于键盘提供的通知:

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

键盘通知

当系统显示或隐藏键盘时,它会发布几个键盘通知。 这些通知包含有关键盘的信息,包括其大小,可用于涉及移动视图的计算。 注册这些通知是获取有关键盘的某些类型信息的唯一方法。 系统为键盘相关事件提供以下通知:

* UIKeyboardWillShowNotification
* UIKeyboardDidShowNotification
* UIKeyboardWillHideNotification
* UIKeyboardDidHideNotification

有关这些通知的更多信息,请参阅UIWindow类参考中的说明。 有关如何显示和隐藏键盘的信息,请参阅文本和Web。

链接地址: http://www.djcxy.com/p/44217.html

上一篇: How can I programmatically check whether a keyboard is present in iOS app?

下一篇: Visual Studio post build event returns error MSB3073