self.view
より少し大きいUITableView
があります。ビューの一番下にUITextField
があり、テキストフィールドの編集が開始されると、デリゲートメソッド– textFieldDidBeginEditing:
を使用してビューを移動します。UITableViewのcontentOffsetを設定してから、オフセットを新しい位置にジャンプします。
これはうまくいきますが、UITextField
が編集されている(コンテンツが既にオフセットされている)ときにビューをスクロールしようとすると、コンテンツがビューの下部の適切な位置に動きます。言い換えれば、私が設定したcontentOffset.y
は、コンテンツビューのサイズに等しくなるように変更されています(通常の動作で予想されるように)。
編集中にこの動作を上書きする方法はありますか?
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
// Scroll to the currently editing text field
[self scrollViewToTextField:textField];
}
- (void)scrollViewToTextField:(id)textField
{
// Set the current _scrollOffset, so we can return the user after editing
_scrollOffsetY = self.tableView.contentOffset.y;
// Get a pointer to the text field's cell
UITableViewCell *theTextFieldCell = (UITableViewCell *)[textField superview];
// Get the text fields location
CGPoint point = [theTextFieldCell convertPoint:theTextFieldCell.frame.origin toView:self.tableView];
// Scroll to cell
[self.tableView setContentOffset:CGPointMake(0, point.y - 12) animated: YES];
}