TPKeyboardAvoiding
一个简单地用于在 iOS 中将文本框移动到键盘不起来的解决方案。
简介
有很多关于如何在编辑期间将 UITextField
和 UITextView
移出键盘的解决方案,通常,这涉及到观察 UIKeyboardWillShowNotification
和 UIKeyboardWillHideNotification
通知,或者实现 UITextFieldDelegate
代理方法,调整父视图的框架,或者使用 UITableView
的 scrollToRowAtIndexPath:atScrollPosition:animated:
,但大多数提出的解决方案通常相当 DIY,并且需要为每个需要它的视图控制器实现。
这是一个相对通用的即插即用解决方案:处理所有内容的 UIScrollView
和 UITableView
子类。
当键盘即将出现时,子类将找到即将被编辑的子视图,并调整其框架和内容偏移量,以确保该视图可见,并且具有匹配键盘弹出动画。当键盘消失时,它恢复其先前的尺寸。
它应该适用于任何基本配置,无论是基于 UITableView
的界面,还是手动放置视图的界面。
它还自动将键盘上的“下一步”按钮挂钩,以便在文本框之间切换。
使用说明
配合UITableViewController
类使用时,将TPKeyboardAvoidingTableView.m
和TPKeyboardAvoidingTableView.h
文件放入您的项目,并在xib中您的UITableView设为TPKeyboardAvoidingTableView
。如果您使用的是非xib的控制器,我找不到任何简单的方法使其UITableView成为一个自定义类:最直接的方式是为其创建一个xib。
对于非UITableViewController
,将TPKeyboardAvoidingScrollView.m
和TPKeyboardAvoidingScrollView.h
源文件放入您的项目,在其视图控制器的xib中添加一个UIScrollView
,将滚动视图的类别设置为TPKeyboardAvoidingScrollView
,并将所有控件置于该滚动视图内。您也可以通过编程方式创建,不需要使用xib - 只用TPKeyboardAvoidingScrollView作为顶级视图。
要禁用自动“下一步”按钮功能,将UITextField的返回键类型更改为非UIReturnKeyDefault。
注意
这些类当前通过调整contentInset参数来避免内容移动到键盘下方。这样做是为了解决iOS中的一个bug,该bug会导致视图先向上跳动,然后才稳定下来。为了使这种规避方式变得容易实现,将contentSize保持与视图框架相同的大小。
许可证(Zlib)
版权所有(c)2013迈克尔·泰森
此软件按“原样”提供,不提供任何明示或暗示的保证。在任何情况下,作者都不会因使用此软件而导致的任何损害负责。
允许任何人在任何目的下使用此软件,包括商业应用,并且可以自由修改和重新分配,但须遵守以下限制
-
此软件的来源不得被误导;您不得声称是原始软件的编写者。如果您使用此软件创建产品,产品文档中对软件的认可将被赞赏,但不是必需的。
-
修改后的源代码版本必须清楚地标记,并且不得将其误认为是原始软件。
-
此声明不得从任何源代码分发中删除或修改。
迈克尔·泰森,美味像素
[email protected]