2012-03-06 2 views
1

У меня возникли проблемы с прокруткой таблицыView, когда пользователь начинает редактировать UITextField, отображаемый в одной из ячеек.Получить позицию элемента

Моя проблема в том, что я не могу найти способ узнать положение UITextField в представлении. Если я попытаюсь сделать activeTextField.frame.origin.y, я получу позицию TextField внутри ячейки, но не внутри tableView.

Способ построения представления следующий: У меня есть TableViewController, который создает ячейки с использованием настраиваемого класса, который инициализирует UITextField. Затем мой TableViewController настроил делегат UITextField для себя, поэтому я могу вызвать событие textFieldDidBeginEditing. Но если я попытаюсь NSLog получить исходный текст TextField, я всегда получаю то же значение для каждого UITextField, который является его позицией в ячейке.

Любая идея о том, как я могу это решить?

+0

Вы пытаетесь работать, какие клетки были прослушиваются, я не уверен, я понимаю ваш вопрос. – Openside

+0

Я пытаюсь выяснить, что является абсолютной позицией UITextField в TableView, поэтому я могу прокрутить свой tableView, чтобы убедиться, что поле все еще отображается, когда появляется клавиатура. – ChrisTauziet

ответ

4

Это всегда путает с ними скоординировать изменения системы ...

Это должно работать, чтобы вы точка в табличной системе координат:

CGPoint textFieldCenter = textField.center; 
CGPoint pointInTableView = [tableView convertPoint:textFieldCenter fromView:textField.superview]; 

Если вы хотите, чтобы он в другом вид, вы должны заменить Tableview с точки зрения вы хотите иметь координаты в

И если вы хотите, чтобы получить ячейку в таблице TextField был в:.

NSIndexPath* path = [tableView indexPathForRowAtPoint:pointInTableView]; 
UITableViewCell* cell = [tableView cellForRowAtIndexPath:path]; 
+0

Это именно то, что я искал! Спасибо огромное ! – ChrisTauziet

+0

У меня была некоторая проблема получения координат вида в scrollview, но это решило мою проблему. –

+0

У меня была сложная проблема, требующая исправления. Представьте себе pickerview внутри popoverView внутри ОЧЕНЬ большой статической ячейки таблицы, внутри представления контейнера, который не является полноэкранным! (Дизайнер, стоящий за этой идеей, был уволен!) –

0

Да, попробуйте использовать этот метод:

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 

Когда вы подскажете клавиатуры, прокручивать Tableview к выбранной ячейке она должна принести клетку в верхней части экрана.

+0

Хорошо, но как я могу узнать, в какой ячейке находится мой UITextField? – ChrisTauziet

+0

Используйте UITableViewDelegate. У вас есть метод, который дает вам indexPath строки, которая была выбрана. (- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath) – Ganzolo

+0

Да, но метод не вызывается, если пользователь нажимает на текстовое поле, которое находится в ячейке, а не сама ячейка. Просто попробовал, и метод запускается только в том случае, если я щелкнул в другом месте ячейки. – ChrisTauziet

2

Чтобы получить положение вашего текстового поля следует использовать метод UIView convertRect:toView:

convertRect: toView: Преобразует прямоугольник из системы координат приемника к тому, что другой точки зрения.

  • (CGRect) convertRect: (CGRect) Прямоугольник toView: (UIView *) вид

пример:

CGRect textFieldFrame = [self.tableview convertRect:yourTextField.frame toView:self.view]; 
+0

Если я попытаюсь сделать это, я получаю тот же результат. - (void) textFieldDidBeginEditing: (UITextField *) textField { CGRect textFieldFrame = [self.tableView convertRect: textField.frame toView: self.view]; NSLog (@ "Позиция:% f", textFieldFrame.origin.y); } – ChrisTauziet

+0

Это зависит от вашего зрения hierrachy, но это определенно путь. Посмотрите на эти методы в документе, вы также можете попробовать convertRect: fromView: что-то вроде CGRect textFieldFrame = [self.view convertRect: yourTextField.frame fromView: self.tableview]; – vdaubry

0

попробовать этот

CGPoint locationinView=[cellView convertPoint:location fromView:tableView]; 

здесь местоположение является точкой textField в cellView.

+0

Не уверен, что я тебя понимаю. Я знаю позицию моего текстового поля в cellView. То, что я хочу знать, - это положение текстового поля в таблицеView или индекс ячейки, где TextField равен – ChrisTauziet

Смежные вопросы