iOS開發中防止鍵盤擋住UITextField解決方案

來源:互聯網
上載者:User

     最近轉入ios開發,發現ios的UITextField如果在螢幕的最底部的時候,鍵盤不能自動的調整介面的布局,需要手動的調整位置才可以,所以自己研究和拿著筆話,想寫一個通用的方法來實現每一個介面自動適配鍵盤的位置,這樣的話,不用每一個介面去操作介面的位置了,具體的解決方案如下:

1. 先建立一個UIViewController  這個UIViewController作為父類,讓以後的每一個介面繼承這個介面,在這個介面裡面實現一個委託,代碼如下:

@interface BaseViewController : UIViewController <UITextFieldDelegate>

2.在這個BaseViewCOntroller.m檔案中,現實UITextFieldDelegate中的兩個方法,textFieldDidBeginEditing(開始編輯UITextField和 textFieldDidEndEditing(結束編輯UITextField),大家都知道,iphone的鍵盤都是固定的,都是系統內建的,沒有第三方的IME的,所以鍵盤的高度是固定的216,我們只要在開始編輯的時候,計算一下當前的UITextField的所在高度相對底部是否有216(就是UITextField的底部邊緣相對螢幕的底部是否有216個長度),如果不夠216,就需要把整體的view上移達到216高度即可;當我們結束編輯的時候,把之前增加的高度相反操作即可,代碼如下:

//設定調整介面的動畫效果//設定調整介面的動畫效果

int prewTag ;  //編輯上一個UITextField的TAG,需要在XIB檔案中定義或者程式中添加,不能讓兩個控制項的TAG相同float prewMoveY; //編輯的時候移動的高度// 下面兩個方法是為了防止TextFiled讓鍵盤擋住的方法/** 開始編輯UITextField的方法 */-(void) textFieldDidBeginEditing:(UITextField *)textField{    CGRect textFrame =  textField.frame;    float textY = textFrame.origin.y+textFrame.size.height;    float bottomY = self.view.frame.size.height-textY;    if(bottomY>=216)  //判斷當前的高度是否已經有216,如果超過了就不需要再移動主介面的View高度    {        prewTag = -1;        return;    }    prewTag = textField.tag;    float moveY = 216-bottomY;      prewMoveY = moveY;        NSTimeInterval animationDuration = 0.30f;    CGRect frame = self.view.frame;    frame.origin.y -=moveY;//view的Y軸上移    frame.size.height +=moveY; //View的高度增加    self.view.frame = frame;    [UIView beginAnimations:@"ResizeView" context:nil];    [UIView setAnimationDuration:animationDuration];    self.view.frame = frame;    [UIView commitAnimations];//設定調整介面的動畫效果}/** 結束編輯UITextField的方法,讓原來的介面還原高度 */-(void) textFieldDidEndEditing:(UITextField *)textField{    if(prewTag == -1) //當編輯的View不是需要移動的View    {        return;    }    float moveY ;    NSTimeInterval animationDuration = 0.30f;    CGRect frame = self.view.frame;    if(prewTag == textField.tag) //當結束編輯的View的TAG是上次的就移動    {   //還原介面        moveY =  prewMoveY;        frame.origin.y +=moveY;        frame.size. height -=moveY;        self.view.frame = frame;    }    //self.view移回原位置    [UIView beginAnimations:@"ResizeView" context:nil];    [UIView setAnimationDuration:animationDuration];    self.view.frame = frame;    [UIView commitAnimations];    [textField resignFirstResponder]; }

3.在上面的代碼中,我們已經增加了委託對UITextField的編輯監聽,下面我們就要讓我們的子類UIViewController去監聽委託

代碼:

IDNameField.delegate = self;

IDNameField是我繼承BaseViewController的子類UIViewController中的一個UITextField,只要實現了上面的操作,我們的UITextField就可以在每一個介面實現自動適配調整介面,達到防止鍵盤擋住UITextField的效果了,以上出自Spring
sky ,歡迎轉載,請尊重作者的經驗!如有疑問,請聯絡:

QQ:840950105

Email:vipa1888@163.com



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.