iOS键盘监听

接口部分

@interface KeyboardMonitor : NSObject

+ (KeyboardMonitor *)monitorWithShowBlock:(void (^)(CGFloat height))showBlock hideBlock:(void (^)(void))hideBlock;

- (void)begin;
- (void)end;

@end

实现部分

@interface KeyboardMonitor()

@property (copy,nonatomic) void(^showBlock)(CGFloat height);
@property (copy,nonatomic) void(^hideBlock)(void);

@property (assign,nonatomic) BOOL monitoring;

@end

@implementation KeyboardMonitor




- (instancetype)init
{
    self = [super init];
    if (self) {
        //初始化操作
        self.monitoring = NO;
        //监听当键盘将要出现时
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
        //监听当键将要退出时
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillHide:)
                                                     name:UIKeyboardWillHideNotification
                                                   object:nil];
    }
    return self;
}

+ (KeyboardMonitor *)monitorWithShowBlock:(void (^)(CGFloat height))showBlock hideBlock:(void (^)(void))hideBlock
{
    KeyboardMonitor *keyboardMonitor = [[KeyboardMonitor alloc] init];
    keyboardMonitor.showBlock = showBlock;
    keyboardMonitor.hideBlock = hideBlock;
    return keyboardMonitor;
}

//当键盘出现
- (void)keyboardWillShow:(NSNotification *)notification
{
    if (self.monitoring == NO) {
        return;
    }
    //获取键盘的高度
    NSDictionary *userInfo = [notification userInfo];
    NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [value CGRectValue];
    int height = keyboardRect.size.height;
    if (self.showBlock) {
        self.showBlock(height);
    }
}

//当键退出
- (void)keyboardWillHide:(NSNotification *)notification
{
    if (self.monitoring == NO) {
        return;
    }
    if (self.hideBlock) {
        self.hideBlock();
    }
}

- (void)begin
{
    self.monitoring = YES;
}
- (void)end
{
    self.monitoring = NO;
}

-(void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容