首先放一个scrollView窗口,将Scroll View视图占整个屏幕。
向Scroll View 添加TextField 控件。
首先,ViewController.h 代码如下;
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelegate> { BOOL keyboardVisible; } @property (weak,nonatomic) IBOutlet UIScrollView *scrollView; @property (weak,nonatomic) IBOutlet UITextField *textField; @end
ViewController.m 代码如下:
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { self.scrollView.contentSize = CGSizeMake(320,600); [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.textField.delegate = self; //[super viewDidLoad]; } //页面加载前调用的方法,注册两个通知:一个是键盘弹出来的通知,另外一个是键盘隐藏的通知,不同的通知调用不同的方法进行处理 -(void) viewWillAppear:(BOOL)animated{ //键盘弹起的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:self.view.window]; //键盘隐藏的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; } -(BOOL)textFieldShouldReturn:(UITextField *)textFieldView{ [textFieldView resignFirstResponder]; return NO; } //收到键盘弹出事件 -(void)keyboardDidShow:(NSNotification *)notif { if(keyboardVisible) { return; } 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; CGRect textFieldRect =[self.textField frame]; [self.scrollView scrollRectToVisible:textFieldRect animated:YES]; keyboardVisible = YES; } // 收到键盘隐藏事件 -(void)keyboardDidHide:(NSNotification*)note{ NSDictionary * info = [note 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; } //页面消失前取消通知 -(void)viewWillDisappear:(BOOL)animated{ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; }