Как обновить многоразовые ячейки в iOS 5? - PullRequest
2 голосов
/ 29 ноября 2011

Я создаю пользовательскую ячейку в раскадровке с идентификатором "TextCell".Это плоская ячейка, однако по коду я добавляю в каждую ячейку текстовое поле, потому что у меня может быть «n» число ячеек, чтобы пользователь мог вставить текст в каждую.Моя проблема в том, что текстовые поля, которые я создаю, похоже, снова и снова создают себя поверх других.Я могу сказать это, потому что у меня есть текст-заполнитель, и он становится все темнее.

Я также использую ARC.Пожалуйста, любое понимание, которое вы можете предоставить мне, может мне очень помочь.

Я прилагаю код функции, к которой я добавляю текстовые поля в ячейки:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"TextCell"];


//create text field inside cell and init it with the default settings
UITextField * textHolder = [[UITextField alloc] initWithFrame:CGRectMake(18, 10, 300, 44)];
[textHolder setPlaceholder:[cellsText objectAtIndex:indexPath.row]];
//[textHolder setValue:[UIColor blackColor] forKeyPath:@"_placeholderLabel.textColor"];
[textHolder setFont:[UIFont fontWithName:@"HelveticaNeue-Regular" size:16]];
[textHolder setTextColor:[UIColor blackColor]];
[textHolder setTextAlignment:UITextAlignmentLeft];
textHolder.tag = FIELD_PREFIX + indexPath.row;
[textHolder setDelegate:self];

[[NSBundle mainBundle] loadNibNamed:@"accessoryView" owner:self options:nil];
[textHolder setInputAccessoryView:accessoryView];
[cell addSubview:textHolder];    

//set keyboard to type passwords    
[textHolder setSecureTextEntry:YES];    

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

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

1) Поместите текстовое поле в ячейку представления таблицы custon в раскадровке, а не создавайте его вручную. Используя пользовательский подкласс UITableViewCell, вы также можете назначить свое текстовое поле свойству в вашем пользовательском подклассе. Это имеет дополнительный бонус, который вы можете добавить кучу других вещей в ячейку. Затем вы можете получить доступ к свойству вместо создания нового текстового поля.

2) Удалите «старое» текстовое поле перед созданием нового. Возможно, вам придется искать во всех подпредставлениях экземпляры UITextField, чтобы добиться этого, поскольку вы уже используете значение тега для чего-то другого.

Первый, безусловно, более чистый вариант.

1 голос
/ 30 ноября 2011

Вы не должны добавлять текстовое поле в представление, вы должны добавлять их в представление содержимого:

[cell.contentView addSubview:textHolder];

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...