странное поведение в iphone - PullRequest
0 голосов
/ 28 июня 2011

Это немного странно.У меня есть представление таблицы в моем приложении, которое показывает извлеченные данные из базы данных.Если прокрутить вниз и выбрать ячейку, текст изменится, и строка текста из какой-либо предыдущей ячейки будет помещена над текстом текущей выбранной ячейки.Я знаю, что это может быть связано с reuseIdentifier, но я понятия не имею, как это исправить.Вот код, который я использую:

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

    UILabel* labelCourse;
    UILabel* labelPlace;

    static NSString *kCellID = @"cellID";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellID];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    }

    Course *course = nil;
    if (tableView == self.searchDisplayController.searchResultsTableView)
    {
        course = [self.filteredListContent objectAtIndex:indexPath.row];
    }
    else
    {
        course = [self.courses objectAtIndex:indexPath.row];
    }    


    CGRect labelCourseFrame = CGRectMake(10, 10, 290, 25);
    labelCourse = [[UILabel alloc] initWithFrame:labelCourseFrame];
    labelCourse.font = [UIFont systemFontOfSize:14.0];
    labelCourse.font = [UIFont boldSystemFontOfSize:18];
    [cell.contentView addSubview:labelCourse];

    CGRect labelPlaceFrame = CGRectMake(10, 35, 290, 25);
    labelPlace = [[UILabel alloc] initWithFrame:labelPlaceFrame];
    labelPlace.font = [UIFont systemFontOfSize:12.0];
    labelPlace.textColor = [UIColor darkGrayColor];
    [cell.contentView addSubview:labelPlace];

    labelCourse.text = course.name;
    labelPlace.text = course.location;

    [labelCourse release];        
    [labelPlace release];
//    cell.textLabel.textColor = [UIColor colorWithHexString:@""];

    return cell;
}

Есть идеи?

Заранее спасибо.

1 Ответ

0 голосов
/ 28 июня 2011

Вы можете переместить часть создания внутрь предложения if, которое создает новую ячейку.

if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    CGRect labelCourseFrame = CGRectMake(10, 10, 290, 25);
    labelCourse = [[UILabel alloc] initWithFrame:labelCourseFrame];
    labelCourse.font = [UIFont systemFontOfSize:14.0];
    labelCourse.font = [UIFont boldSystemFontOfSize:18];
    [cell.contentView addSubview:labelCourse];

    CGRect labelPlaceFrame = CGRectMake(10, 35, 290, 25);
    labelPlace = [[UILabel alloc] initWithFrame:labelPlaceFrame];
    labelPlace.font = [UIFont systemFontOfSize:12.0];
    labelPlace.textColor = [UIColor darkGrayColor];
    [cell.contentView addSubview:labelPlace];

    labelCourse.tag = 50;
    labelPlace.text = 51;

    [labelCourse release];        
    [labelPlace release];
}

Как вы видите, я прикрепил tag s к представлениям, чтобы я мог получить метки при повторном использовании ячеек. Теперь получите этикетки,

UILabel * labelCourse = [cell viewWithTag:50];
UILabel * labelPlace = [cell viewWithTag:51];

и установите их,

labelCourse.text = course.name;
labelPlace.text = course.location;    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...