最终效果图:
BeyondViewController.h
// // BeyondViewController.h // 9_键盘的简单处理 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <span style="font-family: Arial, Helvetica, sans-serif;"><UIKit/UIKit.h></span> @interface BeyondViewController : UIViewController - (IBAction)exitKeyboard:(UIButton *)sender; @end </uikit>
BeyondViewController.m
// // BeyondViewController.m // 9_键盘的简单处理 /* 存在的问题: 1,弹出的键盘可能会遮住界面上的控件,解决方法:使用scrollView,或,动态减少控件的Y值(使之上移) 2,toolBar上面的两个按钮的点击事件,还没有实现 */ // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "BeyondViewController.h" @interface BeyondViewController () { // 键盘上面的附属工具条 UIToolbar *_toolBar; } @end @implementation BeyondViewController - (void)viewDidLoad { [super viewDidLoad]; // 为所有键盘上面添加工具条 [self addToolBarForKeyboard]; } // 为所有键盘上面添加工具条 - (void)addToolBarForKeyboard { // mainBundel加载xib,扩展名不用写.xib NSArray *arrayXibObjects = [[NSBundle mainBundle] loadNibNamed:@"KeyToolBar" owner:nil options:nil]; // 键盘附属工具条 _toolBar = arrayXibObjects[0]; // 为self.view内部的所有文本输入框设置toolBar NSArray *array = self.view.subviews; for (UIView *obj in array) { if ([obj isKindOfClass:[UITextField class]]) { // 为什么要强转,因为UIView的属性 inputAccessoryView 是readOnly UITextField *obj2 = (UITextField *)obj; obj2.inputAccessoryView = _toolBar; } } // 为toolBar中的第1个UIToolbarTextButton(上一个按钮)添加点击事件 //[[_toolBar.subviews firstObject] addTarget:self action:@selector(previousKeyboard:) forControlEvents:UIControlEventTouchUpInside]; // 为toolBar中的第2个UIToolbarTextButton(下一个按钮)添加点击事件 //[[_toolBar.subviews objectAtIndex:2] addTarget:self action:@selector(nextKeyboard:) forControlEvents:UIControlEventTouchUpInside]; // 为toolBar中的最后一个UIToolbarTextButton(完成按钮)添加点击事件 [[_toolBar.subviews lastObject] addTarget:self action:@selector(exitKeyboard:) forControlEvents:UIControlEventTouchUpInside]; } // toolBar里面,点击上一个按钮 - (void)previousKeyboard:(UIButton *)sender { NSLog(@"点击了上一个按钮,要激活上一个输入框"); } // toolBar里面,点击下一个按钮 - (void)nextKeyboard:(UIButton *)sender { NSLog(@"点击了下一个按钮,要激活下一个输入框"); } // 退出键盘 - (IBAction)exitKeyboard:(UIButton *)sender { // 方式1: self.view内部所有的文本框(包括子孙控件...)都退出第一响应者 [self.view endEditing:YES]; return; // 方式2: // 遍历uiview里面所有的控件 ,resignFirstResponder /* for (int i=0; i<self.view.subviews.count; i++) { [self.view.subviews[i] resignFirstResponder]; } */ NSArray *array = self.view.subviews; for (UIView *obj in array) { if ([obj isKindOfClass:[UITextField class]]) { [obj resignFirstResponder]; } } // 方式3: // 在self.view的最开头,铺一个全屏的透明的按钮,连线,只要在屏幕空白区域点击后,就可以调用上面的方式1,退出键盘 } @end
KeyToolBar.xib