Mam UITableView
, który jest nieco większy niż self.view
. Mam u dołu widoku UITextField
i używam metody delegowania – textFieldDidBeginEditing:
, aby przesunąć widok w górę, gdy pole tekstowe zaczyna się edytować.Ustaw UITableView contentOffset, a następnie przeciągnij, wyświetl przeskoki przesunięcia do nowej pozycji
Działa to dobrze, ale jeśli spróbuję przewinąć widok podczas edytowania UITextField
(a zawartość jest już przesunięta), zawartość przesuwa się w dół do "odpowiedniej" pozycji widoku. Innymi słowy, zmieniony zestaw I zostanie zmieniony tak, aby był równy rozmiarowi widoku treści (jak można się spodziewać po normalnym zachowaniu).
Jakieś pomysły, jak zawyżać to zachowanie podczas edycji?
- (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];
}