ビューの UITableViewCell に UITextField があります。UITextField がキーボードの背後にある可能性があるため、次の 2 つの方法を使用して適切に対処します。1 つはキーボードがクリックされたとき、もう 1 つはキーボードが閉じられたときです。
- (void)keyboardNotification:(NSNotification*)notification {
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CustomCell *cell = (CustomCell*)[[tempTextField superview] superview];
CGRect textFieldRect = [cell convertRect:tempTextField.frame toView:self.view];
if (textFieldRect.origin.y + textFieldRect.size.height >= [UIScreen mainScreen].bounds.size.height - keyboardSize.height) {
thetableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0);
NSIndexPath *pathOfTheCell = [thetableView indexPathForCell:cell];
[thetableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:pathOfTheCell.row inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
}
- (void)keyboardhideNotification:(NSNotification*)notification {
thetableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
}
現在はある程度うまく機能していますが、2つの問題があります。
- ENTIRE UITextField がキーボードの上部より下にある場合、テーブルビューはキーボードの上にのみスクロールします。キーボードが選択されている UITextField の途中にある場合、テーブルビューはキーボードの上までスクロールしません。一見すると、これでうまくいくように見えますが、何かが欠けている可能性があります。
2. キーボードがキーボードの下にあり、テーブルビューが上にスクロールすると、素敵なアニメーションの方法でスクロールしますが、完了をクリックするとすぐに元の位置に戻ります。なぜこれが起こっているのかは明らかですが、テーブルビューがあった古い位置に戻るための素敵なアニメーションをどのように作成すればよいでしょうか?
どんな入力でも大歓迎です!
更新: #1 の問題を見つけることができました。ばかげた間違いでした。その測定値が下向きになるため、textField の高さを原点に追加する必要があります。それでは#2に...