iPhone开发 当输入的键盘会挡住UITextField的处理事件
新的方式:
- (IBAction)textFieldDidBeginEditing:(UITextField *)textField {
activeText = textField;
[self slideFrame:YES];
}
- (IBAction)textFieldDidEndEditing:(UITextField *)textField {
activeText = nil;
[self slideFrame:NO];
}
-(void) slideFrame:(BOOL) up
{
int movementDistance = 0; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int actSelfHeight=activeText.frame.origin.y;
if(actSelfHeight>180)
{
movementDistance=actSelfHeight-160;
downNum=movementDistance;
}
int movement = (up ? -movementDistance: downNum);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
//添加键盘的监听事件
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotificationobject:nil];
//
- (IBAction)textFieldDidBeginEditing:(UITextField *)textField {
activeText = textField;
}
- (IBAction)textFieldDidEndEditing:(UITextField *)textField {
activeText = nil;
}
#pragma mark 滚动scrollview 使被隐藏的textfield显示在屏幕正确的位置(软键盘的上方)
- (void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary* info = [aNotification userInfo];
//键盘的大小
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
// 输入项区域被认为定高
CGPoint activeFieldRect = activeText.frame.origin;
int actHeight=activeFieldRect.y;
int actSelfHeight=activeText.frame.size.height;
if(aRect.size.height-actHeight-actSelfHeight<0)
{
CGPoint scrollPoint = CGPointMake(0.0, -(aRect.size.height-actSelfHeight-actHeight));
[scView setContentOffset:scrollPoint animated:YES];
}
}