2015-07-29 3 views
0

У меня есть представление таблицы в моем приложении, где ячейки содержат только одно текстовое изображение на ячейку. Эти текстовые поля заполняются текстом, хранящимся в NSUserDefaults. Пользователь может изменить текст и сохранить его снова. Текстовый массив (текст, который используется для заполнения текстовых просмотров) из NSUserDefaults загружается в viewDidLoad. Однако текст текстовых просмотров в ячейках устанавливается в cellForRowAtIndexPath. Проблема заключается в том, что cellForRowAtIndexPath вызывается, когда пользователь прокручивает табличное представление, поэтому, если он редактирует один из текстовых элементов и прокрутки при печати, все исчезает, потому что вызывается cellForRowAtIndexPath, а текст textViews задается из загруженных данных, которые были загружены на viewDidLoad.Остановить cellForRowAtIndexPath от вызова

Итак, я предположил, что возможно изменение текста текстовых просмотров только один раз (при запуске приложения) решит проблему, но, как оказалось, cellForRowAtIndexPath называется индивидуально для каждой ячейки. Таким образом, он работал, но загружал только текст для текстового элемента первой ячейки, потому что я только это разрешаю cellForRowAtIndexPath.

Мой вопрос: Как я могу позволить cellForRowAtIndexPath изменять тексты textView всех ячеек только при вызове viewDidLoad? Или я могу установить текст textView для каждой ячейки из метода viewDidLoad? Поскольку это явно решило бы проблему.

+1

Я не уверен, что вы полностью понимаете, как работает UITableView. '-cellForRowAtIndexPath' предполагается вызывать каждый раз, когда таблице нужна новая ячейка (что типично при прокрутке). Кроме того, вы уверены, что '-cellForRowAtIndexPath' вызывается перед' -viewDidLoad'? Это звучит не так. – Aaron

+0

Правда, я проверил его, и 'viewDidLoad' вызывается до' -cellForRowAtIndexPath'. Любые предложения, как я мог бы решить эту проблему? –

+0

Вам нужно сохранить измененные данные в вашем 'UITableViewCell' каким-то образом. Вы можете поместить его в массив и сохранить его в памяти, или если вам нужно сохранить его для будущих сеансов, вы можете сохранить его в CoreData. Что касается 'viewDidLoad', я предлагаю вам просмотреть документы жизненного цикла представления, которые предоставляет Apple. – JaredH

ответ

2

Всякий раз, когда пользователь меняет текст в текстовом виде в одной из ваших ячеек - немедленно сохраните этот текст в текстовом массиве. Теперь, если пользователь прокручивается, а затем возвращается в эту ячейку - ячейка будет содержать обновленный текст. Затем, когда пользователь завершит редактирование текста на этом экране, сохраните все изменения в NSUserDefaults (например, вы можете сохранить его в viewWillDisappear).

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