• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 生活随笔 > 正文

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

    时间:2020-05-29来源:山茶花美文网 本文已影响 山茶花美文网手机站

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

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

    类文件如下:

    KeyBoardTopBar.h

    //

    // KeyBoardTopBar.h

    //

    //

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

    // Copyright 2010 手机主题 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 手机主题下载 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 手机主题 All rights reserved.

    //

    #import

    @class KeyBoardTopBar;

    @interface keyboardtopbarViewController : UIViewController {

    UITableView *tableview;

    NSMutableArray *cellsTextArray;

    NSMutableArray *editFieldArray;

    UIButton *btnReg;

    KeyBoardTopBar *keyboardbar;

    CGRect rect;

    }

    在在UIViewController的m文件中,初始化,并添加到view中

    - (void)viewDidLoad {

    [super viewDidLoad];

    ......

    //其中editFieldArray 是UITextField数组,在上面已经初始化,并添加了N个UITextField在里面。

    //具体的代码请下载附件查看,这里只贴出了相关的代码

    keyboardbar = [[KeyBoardTopBar alloc]init];

    [keyboardbar setAllowShowPreAndNext:YES];

    [keyboardbar setIsInNavigationController:NO];

    [keyboardbar setTextFieldsArray:editFieldArray];

    [self.view addSubview:keyboardbar.view];

    }

    //这个方法是UITextFieldDelegate代理中的方法,表示输入框开始处于编辑状态。

    - (void)textFieldDidBeginEditing:(UITextField *)textField{

    [keyboardbar ShowBar:textField]; //显示工具条

    ......

    }

    OK了,调用起来还是很方便吧,当然,这个类还有需要完善的地方,比如,在执行了HiddenKeyBoard方法隐藏了键盘和工具条之后,如果在调用页面时候需要再做进一步处理,目前是无法实现的,等下一个版本中再加入一个Delegate类。

    • iPhone开发中给键盘加个隐藏工具条_eclipse隐藏工具条 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全