键盘遮盖TextField的解决办法
键盘遮盖TextField的解决方法
首先添加UITextFieldDelegate,然后textFiled.delegate = self;下面就是实现UITextFieldDelegate的两个方法了,如下:
首先添加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; } }