`
woainike
  • 浏览: 79824 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)

 
阅读更多

 

背景:

  ios5之前,iphone上的键盘的高度是固定为216.0px高的,中文汉字的选择框是悬浮的,所以不少应用都将此高度来标注键盘的高度(包括米聊也是这么做的)。

  可是在ios5中,键盘布局变了,尤其是中文输入时,中文汉字选择框就固定在键盘上方,这样就使得原本与键盘紧密贴合的界面视图被中文汉字选择框给覆盖住了。一方面影响了界面的美观,另一方面,如果被覆盖的部分就是文本输入框的话,用户就无法看到输入的内容了。因此这个问题就必须得解决了。

解决方法:

  其实在一开始使用216.0px这个固定值来标注键盘的高度就是错误的。因为在ios3.2以后的系统中,苹果就提供了键盘使用的api以及demo程序——“KeyboardAccessory”

  处理键盘事件的正确方法是这样的:(包括获取键盘的高度以及键盘弹出和消失动画的时间)

  1)在要使用键盘的视图控制器中,接收键盘事件的通知:

 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

        // 键盘高度变化通知,ios5.0新增的  
#ifdef __IPHONE_5_0
        float version = [[[UIDevice currentDevice] systemVersion] floatValue];
        if (version >= 5.0) {
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillChangeFrameNotification object:nil];
        }
#endif

 

 

 

 

 

  2)然后添加键盘事件的处理代码:

    获取到当前keyboard的高度以及动画时间,然后对视图进行对应的操作即可。

 

 

#pragma mark -
#pragma mark Responding to keyboard events
- (void)keyboardWillShow:(NSNotification *)notification {
    
    /*
     Reduce the size of the text view so that it's not obscured by the keyboard.
     Animate the resize so that it's in sync with the appearance of the keyboard.
     */
    
    NSDictionary *userInfo = [notification userInfo];
    
    // Get the origin of the keyboard when it's displayed.
    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    
    // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
    CGRect keyboardRect = [aValue CGRectValue];
    
    // Get the duration of the animation.
    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval animationDuration;
    [animationDurationValue getValue:&animationDuration];
    
    // Animate the resize of the text view's frame in sync with the keyboard's appearance.
    [self moveInputBarWithKeyboardHeight:keyboardRect.size.height withDuration:animationDuration];
}


- (void)keyboardWillHide:(NSNotification *)notification {
    
    NSDictionary* userInfo = [notification userInfo];
    
    /*
     Restore the size of the text view (fill self's view).
     Animate the resize so that it's in sync with the disappearance of the keyboard.
     */
    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval animationDuration;
    [animationDurationValue getValue:&animationDuration];
    
    [self moveInputBarWithKeyboardHeight:0.0 withDuration:animationDuration];
}

 

 

 

3)在视图控制器消除时,移除键盘事件的通知:

 

 

[[NSNotificationCenter defaultCenter] removeObserver:self];

 

 

 

ps:

  ios5隐藏功能分享——“字典功能(英英字典):

  在任何输入框中选中一个英文单词,此时会有选择项复制删除”...等,还有一个向右的箭头,点击这个向右的箭头后,就会出现定义选项,点击这个定义按钮即会弹出这个英语单词的英文解释。

 

 

分享到:
评论

相关推荐

    IOS 解决输入框被键盘遮挡问题

    标题"iOS解决输入框被键盘遮挡问题"直指这一常见痛点,描述指出了解决方案——在键盘弹出时,界面向上移动以确保输入框始终可见。以下将详细阐述如何处理这个问题。 首先,我们需要理解iOS中的键盘管理机制。当用户...

    iOS-聊天键盘封装

    本项目“iOS-聊天键盘封装”旨在提供一个完整的解决方案,以实现一个功能丰富的聊天输入工具,包括对emoji表情的支持、大表情展示以及语音输入等功能。这个项目是用Objective-C编写的,这是一门强大的面向对象编程...

    ios-车牌号键盘.zip

    总之,JHLicenseKeyboard是一个针对车牌号输入的自定义键盘解决方案,它简化了iOS应用中此类键盘的开发流程。通过学习和使用这个库,开发者可以提升应用的用户体验,同时也能了解到自定义键盘的设计和实现原理。

    ios键盘遮挡问题

    标题"ios键盘遮挡问题"直指一个常见的用户体验难题:当用户在TextFiled或TextView中输入文字时,弹出的键盘可能会遮挡屏幕下方的内容,使得用户无法查看或编辑他们正在输入的信息。这个问题在iPhone等屏幕较小的设备...

    iOS简单实现隐藏键盘

    在iOS开发中,用户在与UITextField或UITextView交互时,会自动弹出系统键盘以便...在实际项目中,应根据具体场景选择最适合的解决方案。通过学习和实践,开发者可以熟练掌握这些技巧,为用户提供更加流畅的操作体验。

    ios-键盘弹起后自适应布局动画View.zip

    总的来说,这个项目提供了一个实用的解决方案,使得iOS应用在键盘弹出时,能够平滑地调整界面布局,保持良好的用户体验。通过学习和理解这个项目,开发者可以更好地掌握Auto Layout、Size Classes以及键盘事件处理,...

    QMUI iOS——致力于提高项目 UI 开发效率的解决方案.zip

    QMUI iOS 是一个开源项目,专门设计用于提升iOS应用程序用户界面(UI)开发的效率。这个框架由腾讯QQ团队打造,旨在提供一套高效、稳定、易用的UI组件和工具,帮助开发者快速构建美观且一致的用户界面。QMUI iOS 的...

    ios-自定义可变数字键盘.zip

    "ios-自定义可变数字键盘.zip" 文件提供的就是一个这样的解决方案,它可以帮助开发者创建一个可定制的、只显示数字的输入键盘。 自定义键盘的基本原理是利用iOS的UIInputView或UIKeyboardType作为基础,通过自定义...

    swift-YJKeyBoard一行代码解决iOS键盘遮挡问题

    为了解决这个问题,Swift社区提供了一些优秀的解决方案,其中“YJKeyBoard”是一个小巧而强大的库,只需一行代码就能有效地处理键盘遮挡问题。 YJKeyBoard是专门为Swift开发的工具,主要功能是自动管理键盘的显示与...

    IOS应用源码——一个比较完美的键盘控制器,包含多种键盘变化.zip

    在iOS应用开发中,键盘管理是一项...总的来说,这个源码包提供了一个全面的解决方案,帮助开发者更好地管理和优化iOS应用中的键盘交互。通过学习和使用这些代码,开发者可以提升其应用的用户体验,使其更加专业和完善。

    html5 数字键盘 软键盘

    HTML5的数字键盘软键盘就是这样一种解决方案。 1. HTML5与数字键盘: HTML5是超文本标记语言(HTML)的最新版本,增加了许多新的特性和API,使得Web开发更为强大和灵活。在创建数字键盘软键盘时,HTML5的特性如`...

    jQuery仿IOS6虚拟键盘插件.zip

    它的设计注重用户体验,力求在视觉上和功能上接近原生的iOS键盘。 jQuery是一个广泛使用的JavaScript库,它简化了HTML元素的选择、操作、事件处理以及Ajax交互等任务。在这个项目中,jQuery被用来监听输入框的焦点...

    ios-高仿微信表情键盘.zip

    `ios-高仿微信表情键盘.zip`这个资源包显然提供了这样的解决方案,由开发者`ongfei`在GitHub上分享。让我们深入探讨一下这个项目可能包含的关键知识点。 1. **自定义键盘实现**: iOS平台允许开发者创建自定义键盘...

    iPhone隐藏键盘 教程

    在iOS开发中,隐藏键盘是一项常见的需求,尤其在用户完成输入后或点击其他元素时,为了提高用户体验,开发者通常会需要让键盘自动收起。本教程将深入探讨如何在iPhone应用中实现这一功能,结合代码示例和文档,帮助...

    IOS应用源码——自定义数字键盘.zip

    本资源"IOS应用源码——自定义数字键盘.zip"正好提供了这样一个解决方案,让我们详细探讨一下这个主题。 首先,该压缩包中的"clkeypad.jpg"可能是自定义数字键盘的预览图,展示了设计样式和布局。通常,这种键盘会...

    ios应用源码之可扩展的输入框 2018127

    这个“ios应用源码之可扩展的输入框 2018127”项目可能提供了这样一个自定义输入框的解决方案。下面我们将详细探讨相关的iOS编程知识点。 首先,我们要了解iOS中的文本输入控件。基本的输入控件是UITextField,它...

    ios-YCXTextViewKeyboard.zip

    "ios-YCXTextViewKeyboard.zip"是一个解决方案,它是一个用Swift编写的自定义TextView,可以智能地根据键盘的高度变化调整自己的位置,同时根据输入的内容动态改变输入框的高度,最多显示四行文字。 这个项目的核心...

    QMUI_iOS:QMUI iOS——致力于提高项目UI开发效率的解决方案

    QMUI iOS是一个致力于提高项目UI开发效率的解决方案,其设计目的是用于辅助快速构建一个本身基本设计还原效果的iOS项目,同时利用自身提供的丰富控件和兼容处理,让开发者能专注不管是新项目的创造,还是已有项目的...

    禁止手机自带键盘弹出 显示数字键盘

    在这个场景中,描述中提到的“封装好的数字键盘控件”就是一种这样的解决方案。 首先,我们要理解的是,手机操作系统(如Android或iOS)通常会默认提供一套完整的键盘供用户输入文本。然而,这些键盘可能不完全符合...

    iOS第三方之IQKeyboardManager

    IQKeyboardManager是由Hitesh Raj Bhansali创建的开源库,它在iOS应用中提供了一个便捷的解决方案,用于避免键盘弹出时遮挡输入视图。该库通过监听键盘事件自动管理输入框(UITextField和UITextView)的位置,当键盘...

Global site tag (gtag.js) - Google Analytics