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];

    }

}

posted @ 2012-02-14 11:22  凡娃软件  阅读(1467)  评论(3编辑  收藏  举报