UIView如何处理键盘弹起和消失事件
UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification;
UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification;
UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification;
UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification;
UIKIT_EXTERN NSString *const UIKeyboardWillChangeFrameNotification __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
UIKIT_EXTERN NSString *const UIKeyboardDidChangeFrameNotification __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
2.下面是可以 用 NSDictionary来获取相关信息的key的定义。
UIKIT_EXTERN NSString *const UIKeyboardFrameBeginUserInfoKey __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardFrameEndUserInfoKey __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardAnimationDurationUserInfoKey __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); // NSNumber of double
UIKIT_EXTERN NSString *const UIKeyboardAnimationCurveUserInfoKey __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); // NSNumber of NSUInteger
3. 过程如下:
(1)先让类 实现UITextFieldDelegate 这个delegate
(2) 在OnEnter和OnExit中加上这两段代码:
- (void)onEnter
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
[super onEnter];
}
- (void)onExit
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[super onExit];
}
(3)
keyboardWillShow和keyboardWillHide函数里面处理如下:
- (void)keyboardWillShow:(NSNotification *)aNotification
{
if (is_keyboard_showing_ == YES) {
return;
}
is_keyboard_showing_ = YES;
// CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
NSDictionary* info = [aNotification userInfo];
NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
NSTimeInterval animationDuration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect frame = view_.frame;
frame.origin.y -= 150/2;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
view_.frame = frame;
[UIView commitAnimations];
}
- (void)keyboardWillHide:(NSNotification *)aNotification
{
if (is_keyboard_showing_ == NO) {
return;
}
is_keyboard_showing_ = NO;
// CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
NSTimeInterval animationDuration = [[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect frame = view_.frame;
frame.origin.y += 150/2;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
view_.frame = frame;
[UIView commitAnimations];
}