UITextField 输入框writeText加在 toolbar上,编辑时随着键盘高度(中英文时高度不同)动态改变位置,点击背景键盘消失。
(1)在视图将要出现时,监听键盘,
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationControllersetToolbarHidden:NO];
// 监听键盘 [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
(2)在- (void)viewDidLoad 方法中创建一个带透明度的hiddenKeyboardView,加在
[UIApplicationsharedApplication].keyWindow上;点击hiddenKeyboardView,writeText取消第一响应值。
(3) 键盘显示与消失时方法
// 键盘显示
- (void) keyboardWillShow:(NSNotification *) notif
{
NSDictionary *info = [notif userInfo];
NSValue *value = [infoobjectForKey:UIKeyboardFrameBeginUserInfoKey];// 英键盘高度
value = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; // 中文高度
CGSize keyboardSize = [value CGRectValue].size;
//CGRect keyboardRect = [self.view convertRect:[value CGRectValue] fromView:nil];
[UIViewanimateWithDuration:0.3animations:^{
self.view.frame =CGRectMake(0 ,0 - keyboardSize.height ,kScreenWidth, kScreenHeight);
self.navigationController.toolbar.frame =CGRectMake(0,kScreenHeight - keyboardSize.height -44 , kScreenWidth,44);
}];
// 发送 (显示)
UIButton *senBt = (UIButton *) [self.navigationController.toolbarviewWithTag:101];
senBt.hidden = NO;
// 黑色透明背景View 显示
UIView *hiddenKeyboardBlackV = (UIView *)[[UIApplicationsharedApplication].keyWindowviewWithTag:999];
hiddenKeyboardBlackV.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - keyboardSize.height-44 );
hiddenKeyboardBlackV.hidden = NO;
NSLog(@">>>>>>>>>>>jainpan..Show >>>>>");
}
// 键盘收缩
- (void) keyboardWillHide:(NSNotification *) notif
{
[UIViewanimateWithDuration:0.3animations:^{
self.view.frame = CGRectMake(0 ,0, kScreenWidth,kScreenHeight);
self.navigationController.toolbar.frame =CGRectMake(0,kScreenHeight -44, kScreenWidth, 44);
}];
// 黑色透明背景 隐藏
UIView *hiddelKeyboardView = (UIView *)[[UIApplicationsharedApplication].keyWindowviewWithTag:999];
hiddelKeyboardView.hidden = YES;
// 清空输入框内容
writeText.text =@"";
}
(4)最后要在视图将要消失时,移除监听 (防止监听到其他页面的输入框 键盘)
- (void)viewWillDisappear:(BOOL)animated
{
[self.navigationController setToolbarHidden:YES];
[writeText resignFirstResponder];
// 移除监听
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillHideNotification object:nil];
}
注意:(1)push到本页时, UIViewController 只能创建一次;