您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> ios >> 正文

iPhone开发中给键盘加个隐藏工具条

作者:佚名    责任编辑:admin    更新时间:2022-06-22

   因为iPhone手机采用的触摸涉及,本身没有硬件键盘,一般都是点击输入框之后,弹出一个虚拟键盘出来,因此在iPhone开发中,经常在完成编辑输入之后,要写程序代码来关闭软键盘的输出,非常繁琐,当然关闭软键盘的方式有很多,比如放一个按钮在底层,通过点击屏幕的空白处来关闭键盘;也可以处理Return键盘事件来关闭键盘,这些暂且不说,本文要分享的是一个键盘顶部工具条的类,通过这个工具条,可以很方便的关闭键盘,而且有上一项,下一项的输入框切换,非常方便,效果请看下图:

iPhone开发中给键盘加个隐藏工具条 三联

  类文件如下:

  KeyBoardTopBar.h

  //

  // KeyBoardTopBar.h

  //

  //

  // Created by walkman on 10-12-2.

  // Copyright 2010 手机主题 http://www.shouji138.com All rights reserved.

  //

  #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

  KeyBoardTopBar.m 文件

  //

  // KeyBoardTopBar.m

  //

  // Created by walkman on 10-12-2.

  // Copyright 2010 手机主题下载 http://www.shouji138.com All rights reserved.

  //

  #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

  下面是使用这个类的代码:

  在UIViewController头文件中申明,并定义,并且实现UITextFieldDelegate代理

  比如:在keyboardtopbarViewController.h文件,我是这样写的

  //

  // keyboardtopbarViewController.h

  // keyboardtopbar

  //

  // Created by walkman on 10-12-2.

  // Copyright 2010 手机主题 http://www.shouji138.com All rights reserved.

  //

  #import