• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
hellowbabybaby
博客园    首页    新随笔    联系   管理    订阅  订阅

iOS07 键盘弹出,回收,位置

 因为iOS移动设备屏幕大小有限,不能像桌面用鼠标随意拖动,所以类似登陆页面输入时,常把输入框避开虚拟键盘,或者虚拟键盘弹出时输入框移动到可见位置。需要做的是让UItextfield设置代理,然后利用其代理方法:

//键盘收回时代理函数,这里设置登陆框归位

- (void)textFieldDidEndEditing:(UITextField *)textField{//

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{

[loginView setFrame:CGRectMake(296, 376, 432, 300)];

} completion:nil];

}

//键盘弹出时代理函数,这里设置登陆框移动到可见区域

- (void)textFieldDidBeginEditing:(UITextField *)textField{

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{

[loginView setFrame:CGRectMake(296, 88, 432, 300)];

} completion:nil];

}

 

//点击确定后键盘收回

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];

return YES;

}

 此外,中文输入法不同于英文输入法会有选字的区域,也就是说比英文输入法键盘高

高度不一样

所以要想真正让输入框适应键盘高度,应该获取键盘的动态高度然后让输入框位置匹配,添加一个监听通知然后修改位置:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

- (void)keyboardWillShow:(NSNotification *)notification

{

NSDictionary *info = [notification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;

//UIKeyboardCenterEndUserInfoKey

int changeBalue=715-kbSize.height;

[searchView setFrame:CGRectMake(0, changeBalue, 284, 53)];

}

但是实际上objectForKey:UIKeyboardBoundsUserInfoKey已经被弃用了,虽然目前还可以用,文档说建议用UIKeyboardFrameBeginUserInfoKey替代,使用方法以后更新

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
     userName.hidden=YES;
    loginPass.hidden=YES;
    loginButton.hidden=YES;
    [selfregNotification];
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{

    userName.hidden=NO;
    loginPass.hidden=NO;
    loginButton.hidden=NO;
    [selfunregNotification];

}

- (void)regNotification
{
   [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWillChangeFrame:)name:UIKeyboardWillChangeFrameNotificationobject:nil];

}

- (void)unregNotification
{
    [[NSNotificationCenterdefaultCenter] removeObserver:selfname:UIKeyboardWillChangeFrameNotificationobject:nil];
}

#pragma mark - notification handler

- (void)keyboardWillChangeFrame:(NSNotification *)notification
{
    NSDictionary *info = [notification userInfo];
    CGFloat duration = [[infoobjectForKey:UIKeyboardAnimationDurationUserInfoKey]floatValue];
    CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;
    
    CGRect inputFieldRect = RegName.frame;
    CGRect moreBtnRect = RegPass.frame;
    
    inputFieldRect.origin.y += yOffset+50;
    moreBtnRect.origin.y += yOffset+50;
    
    NSLog(@"%f-----%f--------%f----%f",inputFieldRect.origin.x,inputFieldRect.origin.y,inputFieldRect.size.width,inputFieldRect.size.height);
    
    [UIViewanimateWithDuration:duration animations:^{
        RegName.frame = inputFieldRect;
        RegPass.frame = moreBtnRect;
    }];
}
//监听键盘高度变化
    [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(keyboardWasChange:)name:UIKeyboardDidChangeFrameNotificationobject:nil];

    
- (void)keyboardWasChange:(NSNotification *)aNotification {
    NSLog(@"Keyboard change");
    NSString *str=[[UITextInputModecurrentInputMode] primaryLanguage];
    NSLog(@"shurufa--------------%@",str);
//    if ([str isEqualToString:@"zh-Hans"]) {
//        ReplayView.frame = CGRectMake(0, HEIGHT.height-216-125, 320, 45);
//    }else
//    {
//        ReplayView.frame = CGRectMake(0, HEIGHT.height-216-89, 320, 45);
//
//    
//    }
    
       NSDictionary *info = [aNotification userInfo];
    CGSize kbSize = [[infoobjectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
   // CGRect frame = self.search.frame;
    if (kbSize.height ==216) {
        NSLog(@"english");
        ReplayView.frame =CGRectMake(0, HEIGHT.height-216-89,320, 45);
    }
    else if(kbSize.height ==252){
        NSLog(@"中文");
           
     ReplayView.frame =CGRectMake(0, HEIGHT.height-216-125,320, 45);
    }
//  输入的时候整体向上移动。

 

posted @ 2015-12-16 10:08  hellowbabybaby  阅读(446)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3