如果一个页面需要多个textfield或textview,比方说账号、密码、昵称、手机号、验证码等,或者多个界面都有textfield或textview。在输入用到键盘的时候,经常会遇到很多蛋疼的问题,比如键盘的收起,键盘遮挡输入框,输入框的切换、给键盘添加工具栏等,处理起来很头疼,因为相同的业务逻辑我们需要多次处理。这个时候我们可以感谢一下IQKeyboardManager的作者给我们提供了一个keyboard 管理工具,让我们轻松搞定这些问题。
1、IQKeyboardManager的简单应用
其实我们什么都不用做,只需将IQKeyboardManager添加到项目中就可以解决上诉问题,不用添加一行代码,甚至都不用引入头文件。IQKeyboardManager是一个单例,在全项目任何界面都有效。
框架的启用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[IQKeyboardManager sharedManager] setEnable:YES];
[[IQKeyboardManager sharedManager] setEnableAutoToolbar:YES];
return YES;
}
enable 控制整个功能是否启用。
shouldResignOnTouchOutside 控制点击背景是否收起键盘。
shouldToolbarUsesTextFieldTintColor 控制键盘上的工具条文字颜色是否用户自定义。
enableAutoToolbar 控制是否显示键盘上的工具条。
以上设置,就启用了这个库。
有时想在某个界面启用,可以在
- (void)viewWillAppear:(BOOL)animated 和 - (void)viewWillDisappear:(BOOL)animated
里面进行开启关闭
1.修改IQKeyBoardManager的右边的Done按钮
manager.toolbarDoneBarButtonItemText = @"完成";
或者
manager.toolbarDoneBarButtonItemImage = [UIImage imageNamed:@"IQKeyboardImage"];
2.修改IQKeyBoardManager的Toolbar颜色等
manager.shouldToolbarUsesTextFieldTintColor = NO;
manager.toolbarTintColor = [UIColor redColor];
3.是否显示响应者的水印和字号
manager.shouldShowTextFieldPlaceholder = YES;
manager.placeholderFont = [UIFont systemFontOfSize:14.0];
-
设置键盘textField的距离。不能小于零。默认是10.0。<触发条件是textField需要改变y时 >
manager.keyboardDistanceFromTextField = 10.0f;
5.防止IQKeyboardManager让rootview上滑过度,默认是YES
manager.preventShowingBottomBlankSpace = NO;
- IQKeyBoardManager的右边的Done按钮的响应事件doneAction 事件未公开API,不过可以通过代理
- (void)textFieldDidEndEditing:(UITextField *)textField
2、IQKeyboardManager中几个比较重要的属性
大多数情况下默认设置不能满足项目需求,也就是说我们还是要在我们的工程中导入IQKeyboardManager的头文件,对项目进行个性化设置
//是否启用自动键盘处理事件响应,默认为 YES。
@property(nonatomic, assign, getter = isEnabled) BOOL enable;
//键盘到 textfield 的距离,前提是 enable 属性为 YES,如果为 NO,该属性失效 不能小于0,默认为10.0
@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField;
//是否显示键盘上方的 toolBar,默认为YES
@property(nonatomic, assign, getter = isEnableAutoToolbar) BOOL enableAutoToolbar;
也可以使用:
[[IQKeyboardManager sharedManager] disableToolbarInViewControllerClass:[@"控制器Controller" class]];
//枚举,toolBar管理 textfield 的方式:
IQAutoToolbarBySubviews,根据添加顺序
IQAutoToolbarByTag, 根据 tag 值
IQAutoToolbarByPosition,根据坐标位置
@property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour;
//toolBar 右方完成按钮的 text,默认为 Done
@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemText;
//toolBar 右方完成按钮的 text,修改为图片
toolbarDoneBarButtonItemImage
//点击输入框以外部分,是否退出键盘,默认为 NO
@property(nonatomic, assign) BOOL shouldResignOnTouchOutside;
//如果输入框有placeholder的话,那么在toolbar中默认会显示出来。不想要的话就设置为NO;
@property(nonatomic, assign) BOOL shouldShowTextFieldPlaceholder;
实例代码:
IQKeyboardManager *manager = [IQKeyboardManagersharedManager];
manager.enable =YES;// 控制整个功能是否启用。
manager.shouldResignOnTouchOutside =YES;//控制点击背景是否收起键盘
manager.shouldToolbarUsesTextFieldTintColor =YES;//控制键盘上的工具条文字颜色是否用户自定义
manager.toolbarDoneBarButtonItemText =@"完成";//将右边Done改成完成
manager.enableAutoToolbar =YES;// 控制是否显示键盘上的工具条
manager.toolbarManageBehaviour =IQAutoToolbarByTag;//最新版的设置键盘的 returnKey的关键字 ,可以点击键盘上的next键,自动跳转到下一个输入框,最后一个输入框点击完成,自动收起键盘。
Question
(1)、视图有导航栏,不想上移View时,UINavigationBar消失:在UIViewController中
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = scrollView;