键盘的相关处理
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.关于键盘遮蔽的问题
相关文章推荐
- 12. 查询数据库账号的所有权限
- 简单大根堆的实现
- addSubview和insertSubview 区别(ios自学笔记)
- 软考教程复习上
- DP HDOJ 5492 Find a path
- Translate Animation变换
- BFS:Meteor Shower(POJ 3669)
- 父子窗口传递数据
- Median of Two Sorted Arrays
- python实现树莓派生成并识别二维码
- jQuery的UI库的下载
- LeetCode全题解
- sgu209:Areas(计算几何)
- jquery插件pagination实现无刷新ajax分页
- 关于陌陌签名验证机制的研究
- PowerShell 变量(Variable)
- Mac下抓取iPhone数据包的方法——无需越狱
- 截屏并保存
- 使用FlowDroid生成Android应用程序的函数调用图
- 数据库规范