Сохранение ввода в UITableView с пользовательскими ячейками? - PullRequest
1 голос
/ 22 февраля 2011

Мне трудно найти, как правильно связать данные для UITableViews. В настоящее время у меня есть табличное представление, в котором есть несколько пользовательских ячеек, большинство из которых простые, а одна - нет. Кроме того, я использую ячейки по мере необходимости, поэтому в какой-то момент данные из любой данной ячейки могут прокрутиться за пределы экрана, и в этот момент данные будут потеряны с точки зрения пользовательского интерфейса. Мне нужно знать наилучший способ (лучшие практики), чтобы получить эту информацию и сохранить ее.

Я обычно могу показать около 4-5 клеток в любой момент времени.

В настоящее время все мои данные вводятся через текстовые поля (хотя это может скоро измениться, так как я могу добавить тумблер в одну из ячеек). Каждый раз, когда пользователь касается текстового поля, вызывается textFieldDidEndEditing. Затем я сохраняю данные, основанные на некоторой информации из текстового поля (например, тег или текст-заполнитель). Я делаю это, потому что мне нужно получить данные и сохранить их до того, как эта ячейка будет прокручиваться из поля зрения, и в этот момент я больше не смогу сохранять данные, получая текст из UITextField.

Я не могу помочь, но верю, что есть лучший способ сделать это. Моей первой мыслью было найти способ узнать, что данная ячейка собирается прокрутиться из поля зрения (и, таким образом, вероятно, потеряет свое значение, поскольку она будет использоваться повторно), и просто сохранить данные в этой точке. Я не могу найти ничего в ссылках на классы UITableViewController, UITableView или UITableViewCell, которые намекают на что-либо подобное. Итак, я предполагаю, что это не тот путь.

Другая мысль, которая у меня была, была привязка данных, которая кажется наиболее подходящей, но я не могу найти хороших примеров этого. Мне нужен способ привязки данных к пользовательским объектам.

Например, у меня есть объект, скажем, Контакт. Этот объект имеет строковое поле для имени, строковое поле для заметок и поле адреса (другой объект), которое имеет собственный набор полей (например, улица1, улица2, город, штат, почтовый индекс). Я хотел бы связать эти значения с табличным представлением так, чтобы, когда поле было отредактировано, оно сохранялось в моем внутреннем объекте.

Q1 : Есть ли способ сделать это?

К вашему сведению, строковые поля для Контакта будут иметь общие типы ячеек, но Адрес получит свою собственную пользовательскую ячейку со всеми текстовыми полями в ней. Я создаю не разные ячейки для каждого поля в адресе, а одну настраиваемую ячейку с 4 или 5 текстовыми полями.

Чтобы усложнить ситуацию немного сложнее, мне, возможно, придется поменять пользовательскую ячейку адреса, чтобы она соответствовала ячейке другой страны. Поэтому теперь мне нужно привязать объект Address (ref) к новой пользовательской ячейке адреса.

Q2 : Изменит ли это ответ на вопрос Q1 выше?

Опять же, я ищу лучший способ сохранить значения из пользовательских UITableViewCells с UITextFields, и я должен учитывать тот факт, что данные могут прокручиваться с экрана, и ячейка может использоваться повторно, поэтому не все данные, которые я Потребность доступна для меня ко времени выхода пользователя из UITableView.

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

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

В настоящее время все мои данные вводятся через текстовые поля (хотя это может скоро измениться, так как я могу добавить тумблер в одну из ячеек).Каждый раз, когда пользователь касается текстового поля, вызывается textFieldDidEndEditing.Затем я сохраняю данные, основанные на некоторой информации из текстового поля (например, тег или текст-заполнитель).Я делаю это потому, что мне нужно получить данные и сохранить их до того, как эта ячейка не будет видна, и в этот момент я больше не смогу сохранять данные, получая текст из UITextField.

Я не могу помочьно верю, что есть лучший способ сделать это.

На мой взгляд, это именно тот способ, которым это можно сделать.Представления никогда не должны содержать данные.В результате, как только пользователь редактирует представление, новые данные должны быть сохранены в модели.

Другая мысль, которую я имел, была привязка данных, которая кажется наиболее подходящей, но яне могу найти хороших примеров этого.Мне нужен способ привязки данных к пользовательским объектам.

В1: Есть ли способ сделать это?

Нет, не на iPhone.Какао в OS X имеет нечто подобное в виде привязок какао в сочетании с NSArrayController, но эта функция недоступна в iOS.Вы должны идти по ручному маршруту.

0 голосов
/ 22 февраля 2011

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

Как правило, в редактируемом подробном представлении нет необходимости повторно использовать UITableViewCell экземпляров. Если вместо динамического создания ячеек в tableView:cellForRowAtIndexPath: вы создаете ячейки в Интерфейсном Разработчике или в своих методах init... или viewDidLoad, вы можете кэшировать их в переменных экземпляра, чтобы вам не приходилось беспокоиться об исчезновении пользовательских данных, поскольку побочный эффект прокрутки.

Я хотел бы связать эти значения с вид таблицы такой, что когда поле был отредактирован, он сохраняется в моем внутренний объект

Вы должны иметь возможность использовать NSKeyValueObserving методы для непосредственного наблюдения за изменениями text свойств UITextField экземпляров. Вы можете воспользоваться этим для распространения изменений, хотя вам нужно будет реализовать некоторые пользовательские функции в вашем контроллере (или в другом месте), чтобы связать текстовые поля с ключевыми путями.

...