Текст в UITableViewCell отсутствует при прокрутке вниз
-
07-07-2019 - |
Вопрос
Я добавил несколько ячеек в табличное представление, и у каждой ячейки есть текстовое поле, которое позволяет пользователям вводить тексты. Я обнаружил, что когда я прокручиваю вниз и возвращаюсь, ввод первых нескольких строк исчезнет. Кто-нибудь знает в чем проблема? Р>
Ниже приведен фрагмент моих кодов:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
//init cell
static NSString *TableIdentifier = @"MyIdentifier";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableIdentifier];
if(cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier:TableIdentifier] autorelease];
}
//set cell for each row
if([indexPath row] == 0)
{
cell.textLabel.text = @"Row A";
txt_A = [self CreateTextField]; //create textField
[cell.contentView addSubview:txt_A]; //add textField to cell
}
else if([indexPath row] == 1)
{
cell.textLabel.text = @"Row B";
txt_B = [self CreateTextField];
[cell.contentView addSubview:txt_B];
}
else{...} }
Решение
Вы имеете в виду, что пользовательский ввод исчезнет? Если это так, вероятно, это потому, что cellForRowAtIndexPath:
повторно использует ячейку и снова выполнит [self CreateTextField]
.
Таким образом, если вы не сохраните пользовательский ввод до исчезновения ячейки, ваши ячейки будут перерисованы пустыми и повторно инициализированы пустыми.
Если вы сохраняете пользовательский ввод, вы можете повторно инициализировать ячейку с помощью правильного пользовательского ввода.
Другие советы
Я считаю, что когда ячейка покидает экран (из-за прокрутки), iPhone сразу же освобождает ее для экономии памяти (таким образом, теряя пользовательский ввод). Теперь, когда вы прокручиваете назад вверх, он создает новую ячейку с новым UITextField в старой позиции с
[self CreateTextField];
Вы должны хранить ввод пользователя для каждого текстового поля отдельно. Например, вы можете стать делегатом текстового поля и поймать
- (BOOL)resignFirstResponder
чтобы получать уведомления, когда пользователь покидает фокус текстового поля. На данный момент вы можете предположить, что пользователь закончил с этим конкретным полем и сохранить его.
Вы можете использовать метод для сохранения пользовательских данных:
- (void)textFieldDidEndEditing:(UITextField *)textField
Этот метод вызывает пользовательский конец, редактирующий поле. Например, сохраните пользовательский ввод в массив.