您的位置:首页 > 其它

键盘的相关处理

2015-09-30 13:21 323 查看
一、KeyBoardTopBar类文件

1)KeyBoardTopBar.h头文件

#import <Foundation/Foundation.h>

@interface KeyBoardTopBar : NSObject {
UIToolbar       *view;                       //工具条
NSArray         *textFields;                 //输入框数组
BOOL            allowShowPreAndNext;         //是否显示上一项、下一项
BOOL            isInNavigationController;    //是否在导航视图中
UIBarButtonItem *prevButtonItem;             //上一项按钮
UIBarButtonItem *nextButtonItem;             //下一项按钮
UIBarButtonItem *hiddenButtonItem;           //隐藏按钮
UIBarButtonItem *spaceButtonItem;            //空白按钮
UITextField     *currentTextField;           //当前输入框
}
@property(nonatomic,retain) UIToolbar *view;

-(id)init;
-(void)setAllowShowPreAndNext:(BOOL)isShow;
-(void)setIsInNavigationController:(BOOL)isbool;
-(void)setTextFieldsArray:(NSArray *)array;
-(void)showPrevious;
-(void)showNext;
-(void)showBar:(UITextField *)textField;
-(void)HiddenKeyBoard;
@end

2)KeyBoardTopBar.m实现文件

#import "KeyBoardTopBar.h"

@implementation KeyBoardTopBar
@synthesize view;

//初始化控件和变量
-(id)init{
if((self = [super init])) {
prevButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"上一项" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowPrevious)];
nextButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"下一项" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowNext)];
hiddenButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"隐藏键盘" style:UIBarButtonItemStyleBordered target:self action:@selector(HiddenKeyBoard)];
spaceButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
view = [[UIToolbar alloc] initWithFrame:CGRectMake(0,480,320,44)];
view.barStyle = UIBarStyleBlackTranslucent;
view.items = [NSArray arrayWithObjects:prevButtonItem,nextButtonItem,spaceButtonItem,hiddenButtonItem,nil];
allowShowPreAndNext = YES;
textFields = nil;
isInNavigationController = YES;
currentTextField = nil;
}
return self;
}
//设置是否在导航视图中
-(void)setIsInNavigationController:(BOOL)isbool{
isInNavigationController = isbool;
}
//显示上一项
-(void)showPrevious{
if (textFields==nil) {
return;
}
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num>0){
[[textFields objectAtIndex:num] resignFirstResponder];
[[textFields objectAtIndex:num-1 ] becomeFirstResponder];
[self showBar:[textFields objectAtIndex:num-1]];
}
}
//显示下一项
-(void)showNext{
if (textFields==nil) {
return;
}
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num<[textFields count]-1){
[[textFields objectAtIndex:num] resignFirstResponder];
[[textFields objectAtIndex:num+1] becomeFirstResponder];
[self showBar:[textFields objectAtIndex:num+1]];
}
}
//显示工具条
-(void)showBar:(UITextField *)textField{
currentTextField = textField;
if (allowShowPreAndNext) {
[view setItems:[NSArray arrayWithObjects:prevButtonItem,nextButtonItem,spaceButtonItem,hiddenButtonItem,nil]];
}
else {
[view setItems:[NSArray arrayWithObjects:spaceButtonItem,hiddenButtonItem,nil]];
}
if (textFields==nil) {
prevButtonItem.enabled = NO;
nextButtonItem.enabled = NO;
}
else {
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num>0) {
prevButtonItem.enabled = YES;
}
else {
prevButtonItem.enabled = NO;
}
if (num<[textFields count]-1) {
nextButtonItem.enabled = YES;
}
else {
nextButtonItem.enabled = NO;
}
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
if (isInNavigationController) {
view.frame = CGRectMake(0, 201-40, 320, 44);
}
else {
view.frame = CGRectMake(0, 201, 320, 44);
}
[UIView commitAnimations];
}
//设置输入框数组
-(void)setTextFieldsArray:(NSArray *)array{
textFields = array;
}
//设置是否显示上一项和下一项按钮
-(void)setAllowShowPreAndNext:(BOOL)isShow{
allowShowPreAndNext = isShow;
}
//隐藏键盘和工具条
-(void)HiddenKeyBoard{
if (currentTextField!=nil) {
[currentTextField  resignFirstResponder];
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
view.frame = CGRectMake(0, 480, 320, 44);
[UIView commitAnimations];
}
- (void)dealloc {
[view release];
[textFields release];
[prevButtonItem release];
[nextButtonItem release];
[hiddenButtonItem release];
[currentTextField release];
[spaceButtonItem release];
[super dealloc];
}
@end

二、如何使用
1)在用到输入的controller类.h头文件中,首先引入导入KeyBoardTopBar:

#import "KeyBoardTopBar.h"

NSMutableArray *editFieldArray;     //存放视图中可编辑的控件
KeyBoardTopBar *keyboardbar;

2)在用到输入的controller类.m实现文件中,首先初始化KeyBoardTpBar类的实例,如下:
keyboardbar = [[KeyBoardTopBar alloc]init];
[keyboardbar  setAllowShowPreAndNext:YES];
[keyboardbar setIsInNavigationController:NO];
[keyboardbar setTextFieldsArray:editFieldArray];
[self.view addSubview:keyboardbar.view];
3)在用到输入的controller类.m实现文件中,在此以UITextField为例说明,在它的回调方法中,实现如下:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
[keyboardbar showBar:textField]; //KeyBoardTopBar的实例对象调用显示键盘方法
}

三、总结
上述的基本原理就是在键盘的上方,加一个透明状的工具条;当然不需要专门定义类,也可以的,可以直接在
需要调用键盘的地方加入工具条,让你的工具条随着键盘的出现而出现,消失而消失!


关于键盘的回收的几种方式:

1.点击编辑区以外的地方的时候 (UIView)

2.点击编辑区以外的地方的时候(UIControl)

3.使用制作收起键盘的按钮

4.使用判断输入资源

5.关于键盘遮蔽的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: