自动处理键盘事件的第三方库 IQKeyboardManager

转载自:http://www.open-open.com/lib/view/open1425955017138.html

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

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

因为这个库是单例模式的 也就是说无论在哪设置了一个属性 那么这个属性对全局都是生效的  这个库是一个单例,它一旦生效,全项目任何界面都有效。让它生效的代码可以写在任意位置,我写在AppDelegate里。 

另外  只要导入这个库  即使不做任何操作的话  默认也是会添加工具条的  

- (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控制是否显示键盘上的工具条。 

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

使用方法,代码如下: 

#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的先后顺序。

IQKeyboardManager *manager = [IQKeyboardManager sharedManager];
    //控制整个功能是否启用。
    manager.enable = YES;
    //控制点击背景是否收起键盘
    manager.shouldResignOnTouchOutside = YES;
    //控制键盘上的工具条文字颜色是否用户自定义。  注意这个颜色是指textfile的tintcolor
    manager.shouldToolbarUsesTextFieldTintColor = YES;
    //中间位置是否显示占位文字
    manager.shouldShowTextFieldPlaceholder = YES;
    //设置占位文字的字体
    manager.placeholderFont = [UIFont boldSystemFontOfSize:17];
    //控制是否显示键盘上的工具条。
    manager.enableAutoToolbar = YES;
    //某个类中禁止使用工具条
    [[IQKeyboardManager sharedManager]disableToolbarInViewControllerClass:[UIViewController class]];

如果你不使用storyboardxib创造你的视图。你需要重写-(void)UIViewController loadview方法,需要设置一个UIScrollView实例self.view

-(void)loadView  


UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.view = scrollView;
}


如果你想在某个 viewcontroller 禁用 IQKeyboardManager 你应该在 ViewDidAppear 中禁用IQKeyboardManager,而在ViewWillDisappear启用它 
代码:


原文地址:https://www.cnblogs.com/yecong/p/6017489.html