私はここのドキュメントでAppleが持っているデモコードを使用しました:
UITextFieldをタップしてキーボードが表示されたら、ビューを上にスライドする必要があります。私は上記のリンクのコードを使用しています。これはApple独自のデモコードであり、これは理にかなっています。
しかし、私の問題は、Appleのコードを実質的に変更せずに使用すると、実際にはテキストフィールドをタップした後ではなく、入力時にのみビューが上にスライドします。
この- (void)keyboardWasShown:(NSNotification*)aNotification
メソッドでは、ビューが上にスライドするかどうかは、thisifステートメントが呼び出されたときに発生します。テキストフィールドがキーボードの下にある場合は上にスライドし、キーボードの下にない場合は上にスライドしません。
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
問題は、テキストフィールドをタップすると、このifステートメントがスキップされ、その中のコードが実行されないことです。
私はそれを解決することはできませんが、それはすべて以下のこの方法で起こります。最初のタップではなく、入力時にスライドするだけなのはなぜですか?
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}