获取键盘弹出和消失时的相关信息

在消息机制之通知中心传值(NSNotificationCenter)中详细说了用户自定义的通知中心传值. 其实在系统中还有很多系统自带的通知, 系统来控制 post 时机, 如键盘的相关通知, UIWindow 的相关通知等等. 在这些通知中, 系统在 post 时, 自带了UserInfo, 今天来说一说键盘的通知和其 UserInfo.

例举关于 UIWindow和 Keyboard的通知:

UIWindowDidBecomeVisibleNotification; // nil
UIWindowDidBecomeHiddenNotification;  // nil
UIWindowDidBecomeKeyNotification;     // nil
UIWindowDidResignKeyNotification;     // nil

UIKeyboardWillShowNotification; //键盘将要出现
UIKeyboardDidShowNotification;  //键盘已经出现
UIKeyboardWillHideNotification;  //键盘将要消失
UIKeyboardDidHideNotification;  //键盘已经消失
UIKeyboardWillChangeFrameNotification; //键盘将要改变 frame
UIKeyboardDidChangeFrameNotification; //键盘已经改变 frame

键盘的 UserInfo

keyboard 的通知的 UserInfo中包含的内容有如下:

UIKeyboardFrameBeginUserInfoKey //初始的 frame
UIKeyboardFrameEndUserInfoKey   //结束的 frame
UIKeyboardAnimationDurationUserInfoKey  //持续的时间
UIKeyboardAnimationCurveUserInfoKey  //UIViewAnimationCurve
UIKeyboardIsLocalUserInfoKey  //是否是当前 App的键盘

//已弃用
UIKeyboardCenterBeginUserInfoKey   NS_DEPRECATED_IOS
UIKeyboardCenterEndUserInfoKey     NS_DEPRECATED_IOS
UIKeyboardBoundsUserInfoKey        NS_DEPRECATED_IOS     

例子

- (void)viewDidLoad {
    [super viewDidLoad];

    //监听,当键盘出现时自动发送消息
    [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

    //监听,当键退出时自动消息
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}

//键盘出现时接受消息通知
- (void)keyboardWillShow:(NSNotification *)aNotification {
    NSDictionary *userInfo = [aNotification userInfo];

    //获取键盘初始的frame
    NSValue *beginFrame = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGRect keyboardBeginRect = [beginFrame CGRectValue];

    //获取键盘结束的frame
    NSValue *endFrame = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardEndRect = [endFrame CGRectValue];
    //获取当前键盘高度
    CGFloat keyboardHeight = keyboardEndRect.size.height;

    //获取持续的时间
    NSNumber *time = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    //是否是当前 app 的键盘
    NSNumber *isCurrentKB = [userInfo objectForKey:UIKeyboardIsLocalUserInfoKey];


}
//键盘消失时接受消息通知
- (void)keyboardWillHide:(NSNotification *)aNotification {

}

打印结果

打印 KeyBoard 的 notification, 后三个在 iOS3.2后已被弃用.

 

{ 
name = UIKeyboardWillShowNotification; 
userInfo = { 
UIKeyboardAnimationCurveUserInfoKey = 7; 
UIKeyboardAnimationDurationUserInfoKey = “0.25”’ 
UIKeyboardFrameBeginUserInfoKey = “NSRect: {{0, 667}, {375, 258}}”; 
UIKeyboardFrameEndUserInfoKey = “NSRect: {{0, 409}, {375, 258}}”; 
UIKeyboardIsLocalUserInfoKey = 1; 
UIKeyboardBoundsUserInfoKey = “NSRect: {{0, 0}, {375, 258}}”; 
UIKeyboardCenterBeginUserInfoKey = “NSPoint: {187.5, 796}”; 
UIKeyboardCenterEndUserInfoKey = “NSPoint: {187.5, 538}”; 
} 
}

 

你可能感兴趣的:(获取键盘弹出和消失时的相关信息)