Несколько строк вставляются автоматически в режиме редактирования с помощью UITextFields, аналогично контактному телефону/электронной почте.

Я пытаюсь воссоздать функциональность, аналогичную добавлению/редактированию телефонных номеров или электронных писем в редактировании контактов на iPhone. У меня всегда есть пустая строка с текстом-заполнителем. В режиме редактирования (нажатие кнопки на панели инструментов) я раскрываю UITextField. В обратном вызове «редактирование измененного» я ​​вставляю новую строку в раздел, опять же, аналогично представлению редактирования контактов iPhone. Однако после вставки, когда я начинаю изменять 2-ю строку (3-я строка вставляется, как и ожидалось), значение текстового поля 1-й строки очищается до значения заполнителя.
Я где-то читал, что мне нужно будет сохранить текстовое поле. значение в строке 1, во время вставки 2-й строки и в конце редактирования (я полагаю), иначе оно было бы потеряно? Мне это кажется довольно странным, и мне было интересно, единственный ли это способ? В какой момент я вернусь, чтобы восстановить его? Это, конечно, продолжает повторяться, когда я вставляю новую строку и изменяю значения значений последней строки во всех предыдущих строках, которые очищаются. Может ли кто-нибудь указать мне пример аналогичной функциональности редактирования контактов? Если бы я изменил способ вставки строк, сделав так, чтобы последняя строка всегда была строкой «+ Добавить значение», помогло бы это? Я бы так не думал. Кроме того, было бы неплохо, если бы я мог изменить стиль 1-й строки с UITableViewCellEditingStyleNone на UITableViewCellEditingStyleDelete, но независимо от того, что я пытался, включая переключение редактирования NO/YES в середине, устанавливая все видимые строки, чтобы они реагировали на игнорирование переходов, я не могу это получить для работы, чтобы все строки, кроме последней, были с UITableViewCellEditingStyleDelete. Итак, я подумал, хорошо, пусть у меня будет начальная строка, которую нельзя удалить (не то, что я хотел, но я могу с этим жить).


person kos    schedule 11.02.2013    source источник


Ответы (2)


Пожалуйста, подтвердите, но, читая дальше, я предполагаю, что прокрутка строк вне поля зрения приведет к той же проблеме, поэтому для textFieldDidEndEditing, а также, возможно, для каждой вставки в моем случае необходимо обрабатывать для сохранения «новых» данных в соответствующем запись массива хранения данных для каждой строки. Однако в моем случае без прокрутки мне, вероятно, потребуется сделать: - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimat.... для всех строк в изменяемом разделе и, возможно, для всех видимых строк. Подтверждение приветствуется.

person kos    schedule 11.02.2013

Зачем вообще повторно использовать в вашем случае? Если все строки постоянно отображаются на экране, просто создайте новую UITableViewCell для каждой.

UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

настроить контент, чтобы идти на него...

[cell.contentView addSubview:WHATEVER_YOU_CREATED];
[cell.contentView sizeToFit];
return cell;

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

person jeka    schedule 11.02.2013
comment
MyProfilePropertyCell *cell = [[MyProfilePropertyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@MyCellFromStoryboardId]; это создает пустую строку без пользовательских меток, как определено в раскадровке. Что я делаю не так? Хотя чем больше я об этом думаю, тем больше я думаю, что это не проблема в моем случае, как описано в исходной проблеме, поскольку я еще не прокручиваю и повторного использования быть не должно. Однако вы правы, мне не нужно использовать повторное использование ячеек, если я могу правильно отображать свою пользовательскую ячейку. - person kos; 12.02.2013
comment
Я предполагаю, что это связано с тем, что в моей пользовательской реализации initWithStyle мне пришлось бы инициализировать все элементы управления по сравнению с тем, что делает для меня структура при использовании dequeueReusableCellWithIdentifier? Есть ли альтернатива? - person kos; 12.02.2013
comment
reuseIdentifier - это просто и не имеет ничего общего с идентификатором раскадровки. - person jeka; 20.02.2013