1、案例介紹:利用UIScrollView, 避免鍵盤遮擋控件;圖0一、圖02實際上是存在第三個UIButton的,滑動屏幕能夠看到,如圖06。效果如圖01,圖02。app
圖01
圖02
圖03
圖06ide
2、案例步驟:atom
一、選擇Single View Application新建項目,取名cq.30.ScrollView,如圖03。spa
二、Main.storyboard如圖04,圖05。code
圖04
圖05server
三、CQ30ViewController.hblog
#import <UIKit/UIKit.h> @interface CQ30ViewController : UIViewController<UITextFieldDelegate> { BOOL keyboardVisible; //鍵盤出現標識 } @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UITextField *textField; @end
四、CQ30ViewController.mrem
》經過UITextFieldDelegate實現對UITextField放棄第一響應者身份,關閉鍵盤it
#pragma mark -- UITextFieldDelegate method - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
》註冊監聽鍵盤打開與關閉通知io
-(void) viewWillAppear:(BOOL)animated { //註冊鍵盤出現通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidShow:) name: UIKeyboardDidShowNotification object:nil]; //註冊鍵盤隱藏通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (keyboardDidHide:) name: UIKeyboardDidHideNotification object:nil]; [super viewWillAppear:animated]; } -(void) viewWillDisappear:(BOOL)animated { //解除鍵盤出現通知 [[NSNotificationCenter defaultCenter] removeObserver:self name: UIKeyboardDidShowNotification object:nil]; //解除鍵盤隱藏通知 [[NSNotificationCenter defaultCenter] removeObserver:self name: UIKeyboardDidHideNotification object:nil]; [super viewWillDisappear:animated]; }
》經過監聽鍵盤的打開與關閉動態改變UIScrollView的frame,聚焦當前UITextField。
-(void) keyboardDidShow: (NSNotification *)notif { if (keyboardVisible) {//鍵盤已經出現要忽略通知 return; } // 得到鍵盤尺寸 NSDictionary* info = [notif userInfo]; NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize keyboardSize = [aValue CGRectValue].size; //從新定義ScrollView的尺寸 CGRect viewFrame = self.scrollView.frame; viewFrame.size.height -= (keyboardSize.height); self.scrollView.frame = viewFrame; //滾動到當前文本框 CGRect textFieldRect = [self.textField frame]; [self.scrollView scrollRectToVisible:textFieldRect animated:YES]; keyboardVisible = YES; } -(void) keyboardDidHide: (NSNotification *)notif { NSDictionary* info = [notif userInfo]; NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize keyboardSize = [aValue CGRectValue].size; CGRect viewFrame = self.scrollView.frame; viewFrame.size.height += keyboardSize.height; self.scrollView.frame = viewFrame; if (!keyboardVisible) { return; } keyboardVisible = NO; }