获取iOS设备键盘高度

使用cocos2dx 3.9版本开发时,有些UI需要根据键盘弹出高度自适应布局,而自带的TextField控件并未提供获取键盘高度的API,需要自己实现:

.h //oc接口头文件

@interface TKKeyBoard:NSObject

- (id)init;

- (void)keyboardWillShow:(NSNotification *)aNotification;

- (void)keyboardWillHide:(NSNotification *)aNotification;

@end

 

 

 

.mm

 

static std::function<void(bool show,int h)> m_keyBoardCallBack;

@implementation TKKeyBoard
-(id)init
{
    self = [super init];
    
    m_keyBoardCallBack=nullptr;
    //增加监听,当键盘出现或改变时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    
    //增加监听,当键退出时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
    return self;
}


- (void)keyboardWillShow:(NSNotification *)aNotification
{
    NSDictionary *userInfo = [aNotification userInfo];
    NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [aValue CGRectValue];
    int height = keyboardRect.size.height;
    int width = keyboardRect.size.width;
    NSLog(@"键盘宽度:高度  %d-%d",width,height);
    if (m_keyBoardCallBack) {
        m_keyBoardCallBack(true,width);
    }
}

- (void)keyboardWillHide:(NSNotification *)aNotification;
{
    if(m_keyBoardCallBack){
        m_keyBoardCallBack(false,0);
    }
}

@end

void tkKeyBoardCallBack(std::function<void(bool show,int h)> callback)
{
    m_keyBoardCallBack=callback;
}


.h //c++ 接口的头文件

 

 

#ifndef TKKeyBoardCpp.h
#define TKKeyBoardCpp.h

void tkKeyBoardCallBack(std::function<void(bool show,int h)> callback);


#endif /* TKKeyBoardCpp.h */

 

 

 

 

 

使用方法:

在AppController.mm 中 调用[[TKKeyBoard alloc] init]; 初始化监听

    在需要监听键盘行为的地方 设置tkKeyBoardCallBack() 回调

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值