iPhone - textField в tableViewCell - прокрутка выключенного экрана очищает значение - PullRequest
6 голосов
/ 23 февраля 2010

У меня есть textField внутри tableViewCell. Недавно я заметил, что если я введу значение в textBox, а затем прокручиваю ячейку за пределы экрана, значение в текстовом поле исчезает.

У меня есть защита от этого. Если UIKeyboard отсутствует, то tableView не может прокрутить достаточно далеко, чтобы перерисовать ячейку. Однако некоторые пользователи не используют клавишу «Готово» на клавиатуре, чтобы заставить клавиатуру исчезнуть, и вместо этого прокручивают таблицу вверх, ломая программу.

Есть ли способ немедленно сохранить строку textField в переменной, или запретить прокрутку tableView, или заставить клавиатуру исчезнуть, если пользователь пытается прокрутить tableView?

У меня нет файла NIB для этого представления, это программный tableViewController, поэтому я не могу ничего сделать в Interface Builder с невидимыми пользовательскими кнопками, как это предлагалось в других вопросах по StackOverflow.

Ответы [ 3 ]

5 голосов
/ 23 февраля 2010

Вы создаете экземпляр текстового поля внутри вашего cellForRowAtIndexPath :: method? Если это так, он может повторно создавать каждый раз, когда ячейка прокручивается в поле зрения.

Вы должны сохранить ссылку на текстовое поле на вашем контроллере и повторно использовать ее в вашем cellForRowAtIndexPath ::

0 голосов
/ 23 февраля 2010

Вы должны установить делегат NSTextField, который вы создали, на контроллер, а затем внедрить textField:shouldChangeCharactersInRange:replacementString: в вашем контроллере, чтобы вы получали уведомление в любое время об изменении текста в текстовом поле.

При изменении текста сохраняйте измененный текст в свойстве вашего контроллера.

При создании NSTextField в cellForRowAtIndexPath установите значение из этого свойства.

Помните, что с Какао вам нужно хранить данные модели отдельно от вашего представления.

0 голосов
/ 23 февраля 2010

Ответ на этот вопрос заключается в реализации метода делегата ScrollView willBeginDragging. UITableView наследуется от UIScrollView.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
       [textField resignFirstResponder];
}

Это закрывает клавиатуру, как только TableView начинает прокручиваться

Посредством этого наследования также возможно предотвратить прокрутку tableView, точка. Установите для свойства scrollEnabled значение NO, например

self.tableView.scrollEnabled = NO;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...