最近轉入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