午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    iPhone開發(fā)中給鍵盤加個隱藏工具條
    來源:易賢網 閱讀:1102 次 日期:2014-11-04 09:09:04
    溫馨提示:易賢網小編為您整理了“iPhone開發(fā)中給鍵盤加個隱藏工具條”,方便廣大網友查閱!

    因為iPhone手機采用的觸摸涉及,本身沒有硬件鍵盤,一般都是點擊輸入框之后,彈出一個虛擬鍵盤出來,因此在iPhone開發(fā)中,經常在完成編輯輸入之后,要寫程序代碼來關閉軟鍵盤的輸出,非常繁瑣,當然關閉軟鍵盤的方式有很多,比如放一個按鈕在底層,通過點擊屏幕的空白處來關閉鍵盤;也可以處理Return鍵盤事件來關閉鍵盤,這些暫且不說,本文要分享的是一個鍵盤頂部工具條的類,通過這個工具條,可以很方便的關閉鍵盤,而且有上一項,下一項的輸入框切換,非常方便,效果請看下圖:

    名單

    類文件如下:

    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

    @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代理中的方法,表示輸入框開始處于編輯狀態(tài)。

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

    [keyboardbar ShowBar:textField]; //顯示工具條

    ......

    }

    OK了,調用起來還是很方便吧,當然,這個類還有需要完善的地方,比如,在執(zhí)行了HiddenKeyBoard方法隱藏了鍵盤和工具條之后,如果在調用頁面時候需要再做進一步處理,目前是無法實現的,等下一個版本中再加入一個Delegate類。

    更多信息請查看IT技術專欄

    更多信息請查看技術文章

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網