2013-06-28 13 views
5

Używam etykiety w komórce widoku tabeli. Komórce przypisano przypisany ciąg znaków, ale problem polega na tym, że podczas zaznaczania tekst komórki nie zmienia koloru na biały w przypadku przypisanego ciągu znaków.Ustaw podświetlony kolor tekstu dla UILabel za pomocą NSAttributedString.?

Czy istnieje sposób, aby to naprawić ..?

Każda pomoc jest doceniana.

Oto mój kod.

- (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

Proszę dodać komentarz dla dlaczego głosowali go w dół. –

+0

Domyślam się, że nie uzyskałbyś głosów negatywnych, jeśli pokażesz nam, co zrobiłeś do tej pory. –

+0

@AnkitSrivastava zobacz moją odpowiedź z tego linku http://stackoverflow.com/questions/14068962/how-to-use-multiple-font-stylings-on-a-single-string-inside-a-label/14068992#14068992 :) –

Odpowiedz

2

mam rozwiązanie.

W klasie komórki, możemy przypisać wejście ciągi jak poniżej

- (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

spróbuje użyć ten

-(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

Jest to alternatywne rozwiązanie z opcjami na komórce willSelect i willDeselect, ale staram się znaleźć lepsze rozwiązanie, unikając używania zmian tekstu w kontrolerze, a nie tylko w klasie komórkowej. –

+1

Powinieneś zrobić "label.attributedText = str", a nie po prostu "label.text = str" – superpuccio

+0

@superpuccio Dzięki zmianie .... –

-1

Można użyć klasy RTLabel to będzie bardzo przydatne. Pobierz go stąd RTLabel

+0

Tak, rozwiążmy to w bibliotece innej firmy ... – TheCodingArt

2

rozwiązanie UILabel podklasa

@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 
Powiązane problemy