2013-06-28 7 views
5

Ich verwende ein Etikett auf Tableview-Zelle. Der Zelle wurde eine attributierte Zeichenfolge zugewiesen, das Problem besteht jedoch darin, dass der Zellentext bei der Auswahl für die attributierte Zeichenfolge nicht weiß wird.Stellen Sie die markierte Textfarbe für UILabel mit NSAttributedString ein.

Gibt es eine Möglichkeit, es zu beheben ..?

Jede Hilfe wird geschätzt.

Hier ist ein Blick auf meinen Code.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    LHSearchViewCell *cell = [LHSearchViewCell cellForTableView:tableView fromNib:_cellNib]; 

    cell.selectionStyle = UITableViewCellSelectionStyleGray; 

    cell.headerLabel.textColor = [UIColor darkGrayColor]; 
    cell.headerLabel.highlightedTextColor = [UIColor whiteColor]; 
    cell.headerLabel.font = [UIFont systemFontOfSize:14]; 

    cell.subLabel.font = [UIFont systemFontOfSize:12]; 
    cell.subLabel.textColor = [UIColor darkGrayColor]; 
    cell.subLabel.numberOfLines = 2; 
    switch (indexPath.section) { 
     case 0: 
     { 
      UIFont *font = [UIFont systemFontOfSize:14.0]; 
      NSDictionary *firstAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,[UIColor darkGrayColor],NSForegroundColorAttributeName,nil]; 
      UIFont *secondFont = [UIFont systemFontOfSize:10.0]; 
      NSDictionary *secondAttributes = [NSDictionary dictionaryWithObjectsAndKeys:secondFont,NSFontAttributeName,[UIColor lightGrayColor],NSForegroundColorAttributeName,nil]; 
      NSString* completeString = [NSString stringWithFormat:@"%@ | %@",[_libraryPdfArray objectAtIndex:indexPath.row],[_libraryPdfDateArray objectAtIndex:indexPath.row]]; 
      NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]  initWithString:completeString]; 
      [attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_libraryPdfArray objectAtIndex:indexPath.row]]]; 
      [attributedString setAttributes:secondAttributes range:[completeString rangeOfString:[_libraryPdfDateArray objectAtIndex:indexPath.row]]];    
      cell.headerLabel.attributedText = attributedString; 

      cell.subLabel.text = [_libraryPdfSubtitleArray objectAtIndex:indexPath.row]; 

     } 
      break; 

     case 1: 
     { 
      UIFont *font = [UIFont systemFontOfSize:14.0]; 
      NSDictionary *firstAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,[UIColor darkGrayColor],NSForegroundColorAttributeName,nil]; 
      NSString* completeString = [NSString stringWithFormat:@"%@ | %@",[_ebriefingPdfArray objectAtIndex:indexPath.row],[_ebriefingSecondLabelTextArray objectAtIndex:indexPath.row]]; 
      NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]  initWithString:completeString]; 
      [attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_ebriefingPdfArray objectAtIndex:indexPath.row]]]; 
      [attributedString setAttributes:firstAttributes range:[completeString rangeOfString:[_ebriefingSubtitleArray objectAtIndex:indexPath.row]]]; 
      cell.headerLabel.attributedText = attributedString; 
      cell.subLabel.text = [_ebriefingSubtitleArray objectAtIndex:indexPath.row]; 
     } 
      break; 

     default: 
      break; 
    } 

    return cell; 
} 
+0

Bitte fügen Sie einen Kommentar, warum Sie es niedergestimmt. –

+0

Meine Vermutung ist, dass Sie keine negativen Stimmen bekommen würden, wenn Sie uns zeigen, was Sie bisher gemacht haben. –

+0

@AnkitSrivastava siehe meine Antwort von diesem Link http://stackoverflow.com/questions/14068962/how-to-use-multiple-font-stylings-on-a-single-string-inside-a-label/14068992#14068992 :) –

Antwort

2

ich die Lösung bekommen haben.

In Zell Klasse können wir Eingabeketten zugeschrieben, wie unten

- (void) formatText:(BOOL)isSelected{ 
    UIFont *font = [UIFont systemFontOfSize:14.0]; 
    UIFont *secondFont = [UIFont systemFontOfSize:10.0]; 

    NSMutableDictionary *firstAttributes; 
    NSMutableDictionary *secondAttributes; 

    NSDictionary *firstAttributeFont = @{NSFontAttributeName:font}; 
    NSDictionary *secondAttributeFont = @{NSFontAttributeName:secondFont}; 

    [firstAttributes addEntriesFromDictionary:firstAttributeFont]; 
    [secondAttributes addEntriesFromDictionary:secondAttributeFont]; 

    if (!isSelected) { 
     [firstAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor darkGrayColor]}]; 
     [secondAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor lightGrayColor]}]; 

    } 
    else{ 
     [firstAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; 
     [secondAttributes addEntriesFromDictionary:@{NSForegroundColorAttributeName:[UIColor colorWithWhite:1.0 alpha:4.0]}]; 
    } 


    NSString* completeString = [NSString stringWithFormat:@"%@ %@",self.firstAttributeText,self.secondAttributeText]; 
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]  initWithString:completeString]; 
    [attributedString setAttributes:firstAttributes range:[completeString rangeOfString:self.firstAttributeText]]; 
    [attributedString setAttributes:secondAttributes range:[completeString rangeOfString:self.secondAttributeText]]; 
    self.headerLabel.attributedText = attributedString; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated{ 

    [super setSelected:selected animated:animated]; 
    [self formatText:selected]; 
    // Configure the view for the selected state 

} 

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{ 

    [super setHighlighted:highlighted animated:animated]; 
    [self formatText:highlighted]; 

} 
5

Versuch zu verwenden, um dies ein

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
     { 

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

     UILabel *label = (UILabel *)[cell viewWithTag:yourTag]; 

     NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:label.text]; 

[str addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(10,10)]; 

     label.attributedText = str 
     } 
+0

Dies ist eine alternative Lösung mit Optionen für die Zellen willSelect und willDeselect, aber ich versuche, eine bessere Lösung zu finden, indem die Verwendung von Textänderungen im Controller statt nur in der Zellenklasse vermieden wird. –

+1

Sie sollten "label.attributedText = str" und nicht einfach "label.text = str" tun – superpuccio

+0

@superpuccio Danke geändert .... –

-1

Sie RTLabel Klasse verwenden, kann es sehr nützlich werden. Laden Sie es von hier RTLabel

+0

Ja, lassen Sie uns dies mit einer 3rd-Party-Bibliothek lösen ... – TheCodingArt

2

UILabel Unterklasse Lösung

@implementation CustomLabelHighlighted { 
    NSAttributedString *savedAttributedString; 
} 

-(void)setHighlighted:(BOOL)highlighted { 
    if(!SYSTEM_VERSION_LESS_THAN(@"6.0")){ 
     if(highlighted){ 
      if(!self.attributedText){ 
       return; 
      } 

      NSMutableAttributedString *highAttributedString = [self.attributedText mutableCopy]; 
[highAttributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:(NSRange){0, [highAttributedString.string length]}]; 

      // important! 
      [super setAttributedText:highAttributedString]; 
     } 
     else{ 
      if(savedAttributedString){ 
       self.attributedText = savedAttributedString; 
      } 
     } 
    } else { 
     [super setHighlighted:highlighted]; 
    } 
} 

- (void)setAttributedText:(NSAttributedString *)attributedText { 
    [super setAttributedText:attributedText]; 
    savedAttributedString = attributedText; 
} 

@end 
Verwandte Themen