开发者社区> hybcoder> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于键盘出现与隐藏时调整UITextField的显示位置问题

简介:
+关注继续查看

1、首先在ViewDidLoad里面添加注册键盘隐藏与出现的通知:

    ///< 注册通知,以便在键盘将要出现时,调整页面
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onKeyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    ///< 注册通知,以便在键盘将要隐藏时,恢复页面
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onKeyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

2、在viewWillDisappear里移除对键盘隐藏与出现的通知:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    
    /// 注意:在此处需要移除通知,否则容易照成崩溃
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
    return;
}

3、实现键盘出现、隐藏时的通知回调:

#pragma mark - UIKeyboardWillShowNotification 通知
- (void)onKeyboardWillShow:(NSNotification *)notification {
    CGRect frame = self.view.frame;
    if (frame.origin.y < 0) {
        return;
    }
    // 获取键盘的高度
    CGFloat keyboardHeight = [self keyboardHeightWithKeyboardNotification:notification];
    frame.origin.y -= (keyboardHeight - 20);
    [UIView animateWithDuration:0.35 animations:^{
        self.view.frame = frame;
    }];
    return;
}

#pragma mark - UIKeyboardWillHideNotification 通知
- (void)onKeyboardWillHide:(NSNotification *)notification {
    CGRect frame = self.view.frame;
    if (frame.origin.y > 0) {
        return;
    }
    // 获取键盘的高度
    CGFloat keyboardHeight = [self keyboardHeightWithKeyboardNotification:notification];
    frame.origin.y += (keyboardHeight - 20);
    [UIView animateWithDuration:0.35 animations:^{
        self.view.frame = frame;
    }];
    return;
}

/// 获取键盘高度
- (CGFloat)keyboardHeightWithKeyboardNotification:(NSNotification *)notification {
    NSDictionary *info = notification.userInfo;
    NSValue *value = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [value CGRectValue].size;
    CGFloat keyboardHeight = keyboardSize.height;
    
    return keyboardHeight;
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
布局之悬浮显示更多文本并增加箭头指示效果
布局之悬浮显示更多文本并增加箭头指示效果
0 0
动态改变UITabBarController的菜单文字
有时候项目可能涉及到使用多种语言,如简体、繁体。为了适应这种情况我用到了Localizable.strings,然后在不同的语言版本文件内定义相应的内容(这就不说了,可以参考:http://www.cocoachina.com/ios/20150114/10911.html) 在应用被打开的时候底部的菜单应该能够自动显示相应语言版本的文字。
662 0
C# 实现拖拉控件改变位置与大小
C# 实现拖拉控件改变位置与大小 http://www.soaspx.com/dotnet/csharp/csharp_20120515_9147.html
698 0
VC对话框全屏显示及相应控件位置改变
一、简单对话框全屏显示方法 在OnInitDialog()中任意加入: 1、ModifyStyle(WS_CAPTION,0,0); //如果不想去掉标题栏,去掉该句。 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0); 2、ShowWindow(SW_SHOWMAXIMIZED); 二、复杂一点的对话框全屏显示方法,随屏幕的分辩率而调节 v
1447 0
VC对话框全屏显示及相应控件位置改变(转)
一、简单对话框全屏显示方法 在OnInitDialog()中任意加入: 1、ModifyStyle(WS_CAPTION,0,0); //如果不想去掉标题栏,去掉该句。 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0); 2、ShowWindow(SW...
565 0
表格加载后默认选中第一行,并可键盘导航
      代码 this.getStore().on({'load': function(){this.getSelectionModel().selectFirstRow();var row = this.getView().getRow(0); Ext.get(row).focus(); this.fireEvent("rowclick",null); },scope:this});      选中本行后,触发行点击事件。
515 0
+关注
hybcoder
运营小帮手新闻推广软文发布推广平台,官网:https://www.yunyingxbs.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载