よりUITableView
少し大きいがありself.view
ます。ビューの下部にがあり、テキストフィールドの編集が開始されUITextField
たら、delegateメソッドを使用してビューを上に移動します。– textFieldDidBeginEditing:
これは正常に機能しますが、編集中にビューをスクロールしようとするUITextField
と(そしてコンテンツがすでにオフセットされている場合)、コンテンツはビューの一番下の「適切な」位置にジャークします。言い換えると、contentOffset.y
Iセットは、コンテンツビューのサイズと等しくなるように変更されます(通常の動作で期待されるように)。
編集中にこの動作をオーバーライドする方法はありますか?
- (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];
}