iPad の仮想キーボードが表示されると、ビューの一部のテキスト フィールドが覆われます。キーボードが表示されたときに ViewController を上に移動する方法はありますか?
4023 次
3 に答える
7
私は自分のアプリケーションの1つにこのコードを書きました。
TextFieldの位置を自動的に検出し、それに応じてbaseViewをスクロールします。
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self animateTextField:textField up:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self animateTextField:textField up:NO];
}
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
CGPoint temp = [textField.superview convertPoint:textField.frame.origin toView:nil];
UIInterfaceOrientation orientation =
[[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationPortrait){
if(up) {
int moveUpValue = temp.y+textField.frame.size.height;
animatedDis = 264-(1024-moveUpValue-5);
}
}
else if(orientation == UIInterfaceOrientationPortraitUpsideDown) {
if(up) {
int moveUpValue = 1004-temp.y+textField.frame.size.height;
animatedDis = 264-(1004-moveUpValue-5);
}
}
else if(orientation == UIInterfaceOrientationLandscapeLeft) {
if(up) {
int moveUpValue = temp.x+textField.frame.size.height;
animatedDis = 352-(768-moveUpValue-5);
}
}
else
{
if(up) {
int moveUpValue = 768-temp.x+textField.frame.size.height;
animatedDis = 352-(768-moveUpValue-5);
}
}
if(animatedDis>0)
{
const int movementDistance = animatedDis;
const float movementDuration = 0.3f;
int movement = (up ? -movementDistance : movementDistance);
[UIView beginAnimations: nil context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
if (orientation == UIInterfaceOrientationPortrait){
baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement);
}
else if(orientation == UIInterfaceOrientationPortraitUpsideDown) {
baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement);
}
else if(orientation == UIInterfaceOrientationLandscapeLeft) {
baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement);
}
else {
baseViewController.view.frame = CGRectOffset(baseViewController.view.frame, 0, movement);
}
[UIView commitAnimations];
}
}
于 2011-05-04T03:51:59.120 に答える
1
ValayPatel コードの "if" ステートメントをif(animatedDis>0 || !up)
、up = NO の場合の for 条件に変更してください。それ以外の場合、シフトされたビューは常に前の位置にあります。
于 2013-03-18T03:58:15.793 に答える
1
オブジェクトを に配置することをお勧めします。UIScrollView
キーボードが表示されたら、 を使用できますscrollRectToVisible:
。
[scroller scrollRectToVisible:frame animated:YES];
于 2011-01-14T03:05:57.497 に答える