コードに問題があります。UIScrollView
編集中にUITextField
、キーボード ポップで非表示にする必要があるを移動しようとしています。
コードを「スクロールアップ」する方法がわからないため、現在メインフレームを移動しています。それで、少しコードを書きましたが、うまくいきましたが、UItextfield を編集UITextField
し、「戻る」ボタンを押さずに別のフィールドに切り替えると、メイン ビューが waaayyyyy まで上に移動します。
以下にNSLog()
示すように、変数 size、distance、および textFieldRect.origin.y を使用して実行しました。同じ場所 (y 原点)に 2 つを配置UITextField
し、この特定の 'switch' (リターンを押さずに) を実行すると、同じ番号が得られますが、最初のUITextField
編集ではコードが正常に機能しましたが、2 回目の編集では機能しませんでした。
これをチェックしてください:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
{
int size;
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField];
size = textFieldRect.origin.y + textFieldRect.size.height;
if (change == FALSE)
{
size = size - distance;
}
if (size < PORTRAIT_KEYBOARD_HEIGHT)
{
distance = 0;
}
else if (size > PORTRAIT_KEYBOARD_HEIGHT)
{
distance = size - PORTRAIT_KEYBOARD_HEIGHT + 5; // +5 px for more visibility
}
NSLog(@"origin %f", textFieldRect.origin.y);
NSLog(@"size %d", size);
NSLog(@"distance %d", distance);
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
change = FALSE;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
change = TRUE;
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += distance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
何か案は ?