2011-01-14 3 views
3

настоящего времени у меня следующий код для моего cellForRowAtIndexPath на моем UITableView:UITableViewCell Content View - Добавление UILabels

- (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]; 
} 

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

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

+0

Вы можете поставить скриншот этого glitchyness? –

+0

нет действительно. Это своего рода частная информация. Но ясно, что контентные представления смешиваются и не очищаются должным образом или что-то в этом роде. – CodeGuy

+0

Вы уверены, что текст в нечетных местах или только что цвета неправильные? – Anna

ответ

0

Вы должны сбросить обеих наклеек 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); 
} 
+0

, который хорошо работает. Но что, если бы я хотел изменить рамку метки. Я пробовал эту же структуру и задал фрейм, и он не работает. вещи снова выглядят случайными. как я мог это сделать? – CodeGuy

+0

Я редактировал свой код. Проверьте, делаете ли вы это так. Он должен работать, если вы это сделаете. – EmptyStack

0

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

0

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

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

Btw вашей клетка выглядит настолько сложной, что я рекомендую создать его с Interface Builder.

+0

спасибо. это хорошо работает. Теперь, если бы я хотел изменить рамку для меток для разных разделов. Я пробовал эту же структуру, и это не сработало. Как я могу это сделать? – CodeGuy

+0

Что вы имеете в виду под «сменой рамки»? Если вы имеете в виду высоту ячейки, проверьте - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath; но будьте осторожны, это может быть медленным (больше информации в моем блоге http://jomnius.blogspot.com/2011/02/uitableview-with-custom-cell-height.html) – JOM

Смежные вопросы