Просмотр содержимого UITableViewCell – добавление UILabels

В настоящее время у меня есть следующий код для моего cellForRowAtIndexPath на моем UITableView:

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString* CellIdentifier = @"Cell"; UILabel* nameLabel = nil; UILabel* valueLabel = nil; UILabel *percentLabel = nil; UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; if ( cell == nil ) { inthere = YES; cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease]; cell.selectionStyle = UITableViewCellSelectionStyleNone; nameLabel = [[[UILabel alloc] initWithFrame:CGRectMake( 7.0, 0.0, 140.0, 44.0 )] autorelease]; nameLabel.tag = 21; nameLabel.font = [UIFont systemFontOfSize: 12.0]; nameLabel.textAlignment = UITextAlignmentLeft; nameLabel.textColor = [UIColor darkGrayColor]; nameLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight; nameLabel.backgroundColor = [UIColor clearColor]; [cell.contentView addSubview: nameLabel]; valueLabel = [[[UILabel alloc] initWithFrame: CGRectMake( 165.0, 0.0, 80, 44.0 )] autorelease]; valueLabel.tag = 22; valueLabel.font = [UIFont systemFontOfSize: 11]; valueLabel.textAlignment = UITextAlignmentRight; valueLabel.textColor = [UIColor blueColor]; valueLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; valueLabel.backgroundColor = [UIColor clearColor]; [cell.contentView addSubview: valueLabel]; percentLabel = [[[UILabel alloc] initWithFrame: CGRectMake(245, 0.0, 65, 44.0 )] autorelease]; percentLabel.tag = 24; percentLabel.font = [UIFont systemFontOfSize: 12]; percentLabel.textAlignment = UITextAlignmentRight; percentLabel.textColor = [UIColor blueColor]; percentLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; percentLabel.backgroundColor = [UIColor clearColor]; [cell.contentView addSubview: percentLabel]; } else { nameLabel = (UILabel*)[cell.contentView viewWithTag:21]; valueLabel = (UILabel*)[cell.contentView viewWithTag:22]; percentLabel = (UILabel *)[cell.contentView viewWithTag:24]; } ...and then I initialize the text of each of these three labels... 

}

Но я бы хотел, чтобы эти три ярлыка были разных цветов в зависимости от ячейки. Например, все ячейки в разделе 3 должны иметь красные именаLabels, и все ячейки в разделе 5 должны иметь зеленые значенияLabels. Но если я вставляю это в код после инициализации текста всех ярлыков:

 if(indexPath.section==3) { nameLabel.textColor = [UIColor redColor]; } if(indexPath.section==5) { valueLabel.textColor = [UIColor greenColor]; } 

то все становится испорченным, а таблица все глючит, текст в нечетных местах и ​​ярлыки неправильных цветов и несколько случайный.

Как я могу указать цвета этих трех меток для каждой отдельной ячейки в моей таблице?

Вы должны сбросить оба цвета textColor каждый раз, когда ячейка переработана

Попробуй это,

 if (indexPath.section == 3) { nameLabel.textColor = [UIColor redColor]; nameLabel.frame = CGRectMake(someX, someY, someWidth, someHeight); valueLabel.textColor = [UIColor blackColor]; valueLabel.frame = CGRectMake(someX, someY, someWidth, someHeight); } if (indexPath.section == 5) { nameLabel.textColor = [UIColor blackColor]; nameLabel.frame = CGRectMake(someX, someY, someWidth, someHeight); valueLabel.textColor = [UIColor greenColor]; valueLabel.frame = CGRectMake(someX, someY, someWidth, someHeight); } 

Ваш код выглядит нормально. Единственное, что я могу предложить попробовать, это не использовать autorelease для ярлыков и вместо этого release каждую сразу после добавления в contentView.

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

 if(indexPath.section==3) nameLabel.textColor = [UIColor redColor]; else nameLabel.textColor = [UIColor blackColor]; 

Кстати, ваша камера выглядит настолько сложной, я бы рекомендовал ее создать с помощью Interface Builder.

  • UITableview, динамический раздел и строки
  • Имитировать левое перетаскивание UITableViewCell
  • IOS UITableView contentOffSet больше не скрывает заголовок при возврате из точного подробного представления
  • cellForRowAtIndexPath вызывается только один раз
  • Как получить UITableViewCell из поля зрения и просмотреть его в представлении
  • Нарисуйте тень поверх UITableViewCell
  • Несколько столбцов в iOS
  • iOS7 Предупреждение NSKeyedArchiver: замена существующего значения для ключа «UITintColor»; вероятное дублирование ключей кодирования в иерархии классов
  • Каков наилучший и простой способ создания формы UITableView?
  • Подкласс UITableViewCell с XIB Swift
  • Простой UITableView в Swift - неожиданно найденный nil
  • Давайте будем гением компьютера.