IOS开发UI篇之──键盘添加工具条
2013-05-20 15:35
232 查看
IOS开发UI篇之──键盘添加工具条
IOS开发中,iphone/ipad/itouch采用的触摸设计,本身没有硬件键盘,一般都是点击输入框之后,弹出一个虚拟键盘出来,因此开发中,经常在完成编辑输入之后,要写程序代码来关闭软键盘的输出,非常繁琐,当然关闭软键盘的方式有很多。本文要分享的是一个键盘顶部工具条的类,通过这个工具条,可以很方便的关闭键盘,而且有上一项,下一项的输入框切换,非常方便,效果如下图所示:一、KeyBoardTopBar类文件
1)KeyBoardTopBar.h头文件
#import
@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实现文件中,首先初始化KeyBoardTopBar类的实例,如下:
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的实例对象调用显示键盘方法
}
相关文章推荐
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- 转 IOS开发UI篇之──键盘添加工具条
- IOS开发UI篇之──键盘添加工具条
- IOS开发 键盘添加工具条 退出 上一项 下一项 简单实现
- iOS开发 键盘添加工具条(toolbar)
- iOS开发 键盘添加工具条(toolbar)
- ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明
- IOS开发UI篇之──自定义加载等待框(MBProgressHUD)
- iOS开发之UI篇(5)—— 添加手势
- IOS开发UI篇之──自定义UIActionSheet
- IOS开发UI篇之──自定义UIActionSheet【转】
- IOS开发UI篇之──自定义加载等待框(MBProgressHUD)
- iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明
- IOS开发UI篇之──自定义加载等待框(MBProgressHUD)