2015-07-11 2 views
0

У меня есть «не такой большой» динамический стол с количеством строк, который может варьироваться от 10 до 20.Как не использовать повторно UITableViewCell и сохранять ячейки в памяти после их исчезновения из представления?

Я использовал Storyboard и создал 4 разных прототипа сотовых, которые имеют свой собственный идентификатор. В большинстве этих ячеек есть UITextFields, и пользователь вводит информацию, такую ​​как адреса электронной почты и т. Д.

Я использую dequeueReusableCellWithIdentifier: в tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) для создания своих ячеек.


Однако всякий раз, когда я прокручиваю мой Tableview я могу видеть, что появляющиеся клетки получают данные из верхних клеток, поскольку клетка, которые исчезают являются помещёны для повторного использования.

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

Как я могу это сделать? и как я могу создать ячейку, которая соответствует прототипу из раскадровки без использования dequeueReusableCellWithIdentifier:?


Я уже искал среди подобный вопрос здесь, в StackOverflow и пытались сохранить массив моих клеток и просто возвращает правильный элемент, если он уже существует с tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath), но ничего не работает до сих пор

+0

'но ничего не работал до сих пор', что вы пробовали. –

ответ

3

Вы overthinking это немного. Если вы думаете о том, что делает dequeueReusableCellWithIdentifier:, он просто захватывает ячейку, которую он находит с этим конкретным идентификатором. Если вы хотите, чтобы каждая строка имела свою собственную уникальную ячейку, которая не используется какой-либо другой строкой, просто дайте каждой строке собственный идентификатор. Самый простой способ состоял бы в том, чтобы просто привести строку indexPath или раздел row +, если у вас несколько разделов.

Что-то вроде этого следует сделать это:

let cellIdentifier = String(indexPath.section) + "-" + String(indexPath.row) 
+0

Да, но мне нужен стиль контента, установленный в раскадровке, и он исходит из идентификатора. –

+0

А, ну тогда ответ: вы, вероятно, не можете делать то, что пытаетесь. Вы должны просто настроить ячейки для правильной работы, когда они будут повторно использоваться, как обычно, и тогда у вас не будет никаких проблем. Вам нужна помощь? – Dima

+1

Наконец закончил с сохранением копии моих данных и возвращением ее в ячейки при воссоздании. Я был ленив, чтобы сделать это, и надеялся выяснить, есть ли обходной путь, но, наконец, я наконец-то что-то работает :) –

1

В этих случаях я обычно создаю то, что бы содержание ячейки просмотра таблицы в своем собственном контроллере представления или пользовательский вид, что-то вроде «SignupFormViewController», и сохраните это как свойство на контроллере представления, который управляет вашим табличным представлением. В вашем случае это также могут быть несколько контроллеров представления этого типа в нескольких свойствах или массиве. Затем деактивируйте свои ячейки как обычно, но относитесь к ним как к немым контейнерам, к которым добавляются представления диспетчера представлений в виде подзонов. Тогда вы просто привяжете все свободные концы - удалите представление из ячейки, когда ячейка будет удалена, а не добавит представление, если идентичный вид уже является дочерним элементом ячейки, ограничения для соответствия размеру ячейки и т. Д.

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