У меня есть UITableView
достаточно высокий, что это требует прокрутки. Самая верхняя ячейка в таблице содержит UITextField
, чтобы пользователь мог ввести текст.UITextField внутри UITableViewCell - метод предотвращения сброса текста
Стандартным способом создания этого может быть создание и добавление текстового поля и добавление его в ячейку, созданную или переработанную в cellFOrRowAtIndexPath:
Однако это постоянное повторное создание означает, что текст, введенный в поле, удаляется, когда ячейка прокручивается и возвращается в поле зрения.
Решения, которые я нашел до сих пор, предлагают использовать делегацию UITextField
для отслеживания текста при его изменении и сохранения его в iVar или в качестве свойства. Я хотел бы знать, почему это рекомендуется вместо более простого подхода, который я использую:
Я создаю UITextField
в методе init метода UITableViewController
и сразу же сохраняю его в свойстве. В cellFOrROwAtIndexPath
Я просто добавляю ранее существовавшее поле вместо инициализации нового. Сама ячейка может быть переработана без проблем, но поскольку я всегда использую один и только UITextField
, содержимое сохраняется.
Это разумный подход? Что может пойти не так? Любые улучшения (возможно, я мог бы создать поле в cellForRowAtIndexPath
, но сначала проверить, является ли свойство нулем?)
Спасибо, но это не решает текстовое поле внедренный в ячейке. –
Вы можете сохранить эту первую ячейку в качестве одного из ваших атрибутов класса при создании и доступ к ее содержимому, когда захотите. Дело в том, что после его создания он не будет использоваться повторно, и его содержимое не будет удалено. – clubifaximatic
Вы совершенно правы - это лучше, чем использование init. Кроме того, я могу просто сохранить textview как свойство, а не ячейку. Во всяком случае, это еще раз подтверждает мой вопрос, потому что, если у меня было много текстовых меток, я все же считаю, что ваш подход лучше, чем использование делегирования. Надеюсь, кто-то объяснит, почему нет. –