У меня есть контроллер с раздельным представлением: вид & tableview. В этом представлении таблицы у меня есть пользовательские ячейки с текстовым полем. Я не знаю, сколько ячеек у меня будет, поэтому он будет генерироваться автоматически. И теперь я пытаюсь прокручивать текстовое поле, когда оно становится FirstResponder. Я пробовал что-то вроде этого:Получить позицию ячейки или текстовое поле в этой ячейке
-(void) textFieldDidBeginEditing:(UITextField *)textField {
CGPoint focusOnTextField = CGPointMake(0, 300 + textField.frame.origin.y);
[scroller setContentOffset: focusOnTextField animated: YES];
}
300px - начальная позиция моего TableView. Все выглядит хорошо, но textField.frame.origin.y
всегда равно 0 (например, и bounds.origin.y
).
Я думал, что могу решить проблему, если получить позицию ячейки, в которой текстовое поле активно, а затем заменить textField.frame.origin.y
на cell.frame.origin.y
или что-то в этом роде.
=================================================================================================================================================== =================================
Я забыл сказать, что мой прокрутка таблицы отключен. Я следую вашим советам и примерам кода и решаю их так:
- (UITableViewCell *)cellWithSubview:(UIView *)subview {
while (subview && ![subview isKindOfClass:[UITableViewCell self]])
subview = subview.superview;
return (UITableViewCell *)subview;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField {
UITableViewCell *activeCell = [self cellWithSubview:textField];
float offsetValueY = 200 + activeCell.origin.y;
CGPoint focusOnTextField = CGPointMake(0, offsetValueY);
[scroller setContentOffset:focusOnTextField animated:YES];
}
И знаете что? Работает! :-) Но это создает новую проблему. Когда я начинаю редактировать текстовое поле, скроллер сначала прыгает сверху, а только потом подходит к правильной позиции. Когда я пишу [scroller setContentOffset:focusOnTextField animated:NO];
, и эта проблема исчезает, но плавного перемещения скроллера нет. И это плохо для меня :-) Итак, как мы можем это решить?