Записи таблицы продолжают повторяться и перекрываться - PullRequest
2 голосов
/ 02 февраля 2012

Это мой cellForRowAtIndexPath

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
if (cell == nil) {    
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];    
}   
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(12,11,320,40)];
    label.text = [animalArray objectAtIndex:indexPath.row];
    [cell addSubview:label];

В animalArray у меня есть следующие предметы,

Lion, Dog, Cat, Zebra, Donkey, Monkey... 

Проблема в том,

1.) Когда я добавляю метку в условие if (cell == nil) {, я вижу повторяющиеся записи.как L ion, Dog, Cat, Zebra, а затем снова Lion при прокрутке вниз.

2.) Когда я добавляю его за пределы if (cell == nil) {, записи пересекаются при прокрутке.

Я понимаю, что это потому, что ячейка повторно использует себя, и я создаю меткукаждый раз (чтобы он перекрывался).Я не знаю, как решить эту проблему программно.Может кто-нибудь, пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ:

Я только что показал 1 ярлык здесь.но у меня есть несколько ярлыков для отображения.а также некоторые UIComponants.

Ответы [ 4 ]

2 голосов
/ 02 февраля 2012

Я пишу этот код без проверки синтаксиса:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
if (cell == nil) {    
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];   
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(12,11,320,40)];
label.tag = 556;
    [cell.contentView addSubview:label]; 
}   
UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:556];
    cellLabel.text = [animalArray objectAtIndex:indexPath.row];
0 голосов
/ 03 февраля 2012

Лучший подход - создать подкласс UITableViewCell и добавить все метки. Таким образом, вам нужно установить свойства текста надписей вне if (cell == nil){...} блок.

0 голосов
/ 02 февраля 2012

используйте это, удалив if (cell == nil)

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];    
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(12,11,320,40)];
label.text = [animalArray objectAtIndex:indexPath.row];
[cell addSubview:label];
[label release];
0 голосов
/ 02 февраля 2012

вам не нужно добавлять метку в ячейку таблицы.у него уже есть cell.textLabel.text = @ "некоторая строка".замените эту часть:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(12,11,320,40)];
label.text = [animalArray objectAtIndex:indexPath.row];
[cell addSubview:label];

следующим: cell.textLabel.text = [animalArray objectAtIndex: indexPath.row];

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