UILabel не обновляется в UITableViewCell при перезагрузке - PullRequest
1 голос
/ 14 марта 2011

Я добавляю две UILabels к UITableViewCell, а затем к этой ячейке добавляем метки имени и номера. Когда я перезагружаю данные в UITableView (добавляю ли я или удаляю контакт из табличного представления), данные в метках перекрываются, что означает, что метки не перезагружаются, пока не будет перезагружено все представление.

Может кто-нибудь помочь, пожалуйста?

Код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UILabel *name;
    UILabel *number;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        //NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
        //      NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
        //      [sortDescriptor release];
    }
    CGRect Label1Frame = CGRectMake(10, 10, 140, 25);
    name = [[UILabel alloc] initWithFrame:Label1Frame];
    name.tag = 1;
    [name setBackgroundColor:[UIColor clearColor]];
    [cell.contentView addSubview:name];

    CGRect Label2Frame = CGRectMake(150, 10, 140, 25);
    number = [[UILabel alloc] initWithFrame:Label2Frame];
    number.tag = 1;
    [number setBackgroundColor:[UIColor clearColor]];
    [cell.contentView addSubview:number];

    name.text = [NSString stringWithFormat:@"%@",[names objectAtIndex:indexPath.row]];
    number.text = [NSString stringWithFormat:@"%@",[phonenumbers objectAtIndex:indexPath.row]];

    [name release];
    [number release];
    return cell;    
}

Ответы [ 3 ]

5 голосов
/ 14 марта 2011

Вы должны переместить свой код создания метки в инициализацию ячейки, а затем просто ссылаться на них позже по тегу, как это:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";        

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        //NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
        //      NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
        //      [sortDescriptor release];
        CGRect Label1Frame = CGRectMake(10, 10, 140, 25);
        UILabel *name = [[UILabel alloc] initWithFrame:Label1Frame];
        name.tag = 1;
        [name setBackgroundColor:[UIColor clearColor]];
        [cell.contentView addSubview:name];
        [name release];

        CGRect Label2Frame = CGRectMake(150, 10, 140, 25);
        UILabel *number = [[UILabel alloc] initWithFrame:Label2Frame];
        number.tag = 2;
        [number setBackgroundColor:[UIColor clearColor]];
        [cell.contentView addSubview:number];
        [number release];
    }

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:1];
    UILabel *numberLabel = (UILabel *)[cell viewWithTag:2];
    name.text = [NSString stringWithFormat:@"%@",[names objectAtIndex:indexPath.row]];
    number.text = [NSString stringWithFormat:@"%@",[phonenumbers objectAtIndex:indexPath.row]];

    return cell;    
}
0 голосов
/ 14 марта 2011

Самый простой способ сделать это - создать пользовательские ячейки табличного представления и устанавливать значения меток только в методе CellForRowAtIndexPath.Это обеспечивает наиболее эффективное использование и повторное использование UITableViewCell s.

0 голосов
/ 14 марта 2011

Вы неправильно используете свои объекты UITableViewCell, вам нужно только выделить и настроить объекты UILabel один раз для каждой ячейки, которую нужно создать.Если ячейка уже существует и ее можно использовать повторно, вам просто нужно извлечь нужные объекты UILabel и изменить текстовое свойство для каждого из них:

Я предлагаю прочитать следующее:

Ссылка на класс UITableView

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