各セルに uitextfield がある uitableview があります。テーブルビューの下部にあるテキストフィールドに触れると、テキストフィールドがファーストレスポンダーとして設定され、スクロールされ、キーボードが上にスクロールします(すべて期待どおり)。ただし、キーボード アニメーションがテーブル ビューのスクロールよりも速い場合、キーボードがテキスト フィールドを一時的に覆い隠してしまうため、最初のレスポンダーとして機能しなくなります。
ここに貼り付けることができる基本的なプロジェクトまたはコード スニペットで再現するのは困難です。問題は、各セルが多くのレイアウトを実行しており、スクロールアップなどで他のセルをデキューしているためです。つまり、スクロールがかなり遅いということです。 .
少しぎくしゃくしたスクロールは気にしません。テキスト フィールドがキーボードによって一時的に隠されている場合でも、テキスト フィールドが最初の応答者として保持されるようにする方法を見つけることに興味があるだけです。
編集:
以下の回答のように、テーブルビューがスクロールしているかどうかを維持しようとしており、スクロール= NOの場合にのみファーストレスポンダーの辞任を許可しています。UITableViewDelegate のコードは以下のとおりですが、現在の問題は、テーブル ビューのアニメーション化されていない動き (つまり、scrollToRowAtIndexPath...animated:NO) によって scrollViewDidScroll が発生し、scrollViewDidEndScrollingAnimation が発生しないことです。これ以上ぎこちない方法でこれを回避する方法についてのアイデアはありますか?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"YES");
self.scrolling = YES;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"NO");
self.scrolling = NO;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"NO");
self.scrolling = NO;
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
NSLog(@"NO");
self.scrolling = NO;
}