博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS自动处理键盘事件的第三方库:IQKeyboardManager
阅读量:4590 次
发布时间:2019-06-09

本文共 2425 字,大约阅读时间需要 8 分钟。

我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种。我们需要监听键盘事件,考虑点击背景收起键盘、考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套。这个库帮我们解决了这个事情。

这个库的下载地址:https://github.com/hackiftekhar/IQKeyboardManager

这个库是一个单例,它一旦生效,全项目任何界面都有效。让它生效的代码可以写在任意位置,我写在AppDelegate里。

1
2
3
4
5
6
7
8
9
10
- (
BOOL
)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     
    
IQKeyboardManager *manager = [IQKeyboardManager sharedManager];
    
manager.enable = YES;
    
manager.shouldResignOnTouchOutside = YES;
    
manager.shouldToolbarUsesTextFieldTintColor = YES;
    
manager.enableAutoToolbar = NO;
     
    
return 
YES;
}

 

enable控制整个功能是否启用。

shouldResignOnTouchOutside控制点击背景是否收起键盘。

shouldToolbarUsesTextFieldTintColor 控制键盘上的工具条文字颜色是否用户自定义。

enableAutoToolbar控制是否显示键盘上的工具条。

以上设置,就启用了这个库。

使用方法,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import "ViewController.h"
 
@interface ViewController ()
 
@property (nonatomic, strong) IQKeyboardReturnKeyHandler    *returnKeyHandler;
 
@end
 
@implementation ViewController
 
- (
void
)viewDidLoad {
    
[super viewDidLoad];
     
    
self.returnKeyHandler = [[IQKeyboardReturnKeyHandler alloc] initWithViewController:self];
    
self.returnKeyHandler.lastTextFieldReturnKeyType = UIReturnKeyDone;
    
self.returnKeyHandler.toolbarManageBehaviour = IQAutoToolbarBySubviews;
}
 
- (
void
)dealloc
{
    
self.returnKeyHandler = nil;
}
 
@end

 

设置returnKeyHandler,可以点击键盘上的next键,自动跳到下一个输入框。最后一个输入框点击done自动收起键盘。

运行后,可以看到输入框随着键盘的弹出自动上下浮动。点击背景,键盘收起。全自动了。

这个库默认支持UITextField、UITextView、UIWebView、UIScrollView、UITableView、UICollectionView

最后要注意一点,它可以自动计算多个textField之间的先后顺序,排列依据是看addSubView的先后顺序。

 

关于previous/next按钮不出现的解决办法:

Considering Previous/Next buttons for textField inside customViews:-

If your textFields are on different customView and do not show previous/next to navigate between textField. Then you should create a SpecialView subclass of UIView, then put all customView inside SpecialView, then register SpecialView class using -(void)considerToolbarPreviousNextInViewClass:(Class)toolbarPreviousNextConsideredClass method in AppDelegate.(, )

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    [[IQKeyboardManager sharedManager] considerToolbarPreviousNextInViewClass:[SpecialView class]];    return YES;} 添加上面的代码,并把所有想要跳转(previous/next)textfield的superView(所有textfield)类型改为SpecialView即可。 我是将xib中的View的class直接改为子定义的View(此View什么代码都没有,只是用来包装);

转载于:https://www.cnblogs.com/iamjjh/p/4627219.html

你可能感兴趣的文章
LET IT BE
查看>>
在线帮助你修改图片背景的工具 - Clipping Magic
查看>>
BizTalk动手实验(十三)EDI解决方案开发配置
查看>>
初学github
查看>>
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
查看>>
extjs 下载文件 关键前后端代码
查看>>
.NET 4.0 兼容 .NET 2.0 的方法
查看>>
1001 Maximum Multiple(2018 Multi-University Training Contest 1)
查看>>
对Java对象的认识与理解
查看>>
python——父类与子类的一些说明
查看>>
2019年3月3日 2018-2019-2 20189205《移动平台应用开发实践》第二周作业
查看>>
MySQL 性能优化--优化数据库结构之优化数据类型
查看>>
软件工程之软件需求分析
查看>>
Electron简介和安装使用
查看>>
Improving Visual C++ Debugging with Better Data Display
查看>>
JDBC
查看>>
workspace 配置
查看>>
C# 针对特定的条件进行锁操作,不用lock,而是mutex
查看>>
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>