键盘遮盖TextField的解决办法

键盘遮盖TextField的解决方法
首先添加UITextFieldDelegate,然后textFiled.delegate = self;下面就是实现UITextFieldDelegate的两个方法了,如下:

//编辑前调整
- (void)textFieldDidBeginEditing:(UITextField *)textField{
    CGRect r = [textField convertRect:textField.frame toView:appDelegate.window];//将textField坐标系转换成整个屏幕的坐标系
    CGFloat y = 0.0;
    CGFloat y1 = 0.0;
    
//横竖屏四种情况,算出textField在屏幕坐标系中的高度y,算出屏幕高度与键盘高度差y1
    if (appDelegate.interfaceOrientation == UIInterfaceOrientationPortrait) {
	     y = CGRectGetMaxY(r);
	     y1 = SCREEN_HEIGHT - KEYBOARD_HEIGHT;
    } else if (appDelegate.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
	     y = SCREEN_HEIGHT - r.origin.y;
	     y1 = SCREEN_HEIGHT - KEYBOARD_HEIGHT;
    } else if (appDelegate.interfaceOrientation == UIDeviceOrientationLandscapeRight) {
	     y = r.origin.x + r.size.width ;
	     y1 = SCREEN_WIDTH - KEYBOARD_HEIGHTForHorizontal;
    }else {
	     y = SCREEN_WIDTH - r.origin.x; 
	     y1 = SCREEN_WIDTH - KEYBOARD_HEIGHTForHorizontal;
    }

//当键盘能遮盖时做处理
    if (y > y1) {
	float offsetY  = y - y1;	
	[UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.2];	
    r = view.frame;    //view为textField所在需要调整的view
    preFrame = r;      //记录大小以便调整回来
 
    [UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.2];
        
    r.origin.y = r.origin.y - offsetY;
    view.frame = r;   //调整view的y值
	[UIView commitAnimations];
    viewHasMove = YES;  //记录是否调整
    }
}

//编辑后恢复
- (void)textFieldDidEndEditing:(UITextField *)textField{
    if (viewHasMove) {   //已调整
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.2];
        view.frame = preFrame;   //
        [UIView commitAnimations];
        viewHasMove = NO;
    }
    
}