2013-05-29 6 views
1

J'ai posté cette question hier: Removing parentheses from the string in iOS. Mais je ne suis pas encore en mesure de retirer les supports de l'étiquette.Suppression des crochets de UILabel dans iOS

Je ne sais pas ce que mon erreur. Passé toute la nuit à comprendre, toujours pas capable de le faire.

J'utilise TTTAttributedLabel. Mon code ressemble à ceci:

-(TTTAttributedLabel*)setItalicTextForLabel:(TTTAttributedLabel*)attributedLabel fontSize:(float)Size 
{ 
    [attributedLabel setText:[self.infoDictionary objectForKey:@"description"] afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) 
    { 
     NSRange stringRange = NSMakeRange(0, [mutableAttributedString length]); 
     NSRegularExpression *regexp = ParenthesisRegularExpression(); 
     UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:Size]; 
     DLog(@"%@",italicSystemFont.fontName); 
     CTFontRef italicFont = CTFontCreateWithName((__bridge CFStringRef)italicSystemFont.fontName, italicSystemFont.pointSize, NULL); 
     [regexp enumerateMatchesInString:[mutableAttributedString string] options:0 range:stringRange usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
      if (italicFont) { 
       [mutableAttributedString removeAttribute:(NSString *)kCTFontAttributeName range:result.range]; 
       [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)italicFont range:result.range]; 
       CFRelease(italicFont); 
      } 
     }]; 

     return mutableAttributedString; 
    }]; 
    [[attributedLabel.text stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""]; 
    return attributedLabel; 
} 

Toujours pas en mesure de retirer les crochets. Quelqu'un peut-il signaler mon erreur? J'apprécierais vraiment l'aide.

+0

Je pense que vous voulez dire entre parenthèses, vous essayez de supprimer ce char, "[" droit – aaronman

+0

dit à tort. édité la question. – lakesh

+0

Je vois ce que vous essayez de faire. Ce que j'ai fait était de modifier 'MGMushParser' (une bibliothèque sur GitHub) pour obtenir le résultat que je voulais. Il va analyser certains "tags" (dans votre cas [texte en italique]) et le remplacer par quelques attributs. – borrrden

Répondre

2

Essayez de changer les deux dernières lignes de ce deux:

[attributedLabel setText:[[attributedLabel.text stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""]]; 
return attributedLabel; 

Les méthodes qui commence par la chaîne ... ne change pas la chaîne elle-même renvoie uniquement une nouvelle chaîne qui est modifiée. À propos, les objets NSString sont immuables. Par contre, les objets NSString sont immuables. Si vous souhaitez modifier des chaînes, vous pouvez utiliser NSMutableString, l'implémentation ci-dessous utilise uniquement NSMutabeString, que vous utilisez déjà dans le bloc.

-

Essayez ceci:

-(TTTAttributedLabel*)setItalicTextForLabel:(TTTAttributedLabel*)attributedLabel fontSize:(float)Size 
{ 
    [attributedLabel setText:[self.infoDictionary objectForKey:@"description"] afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) 
    { 
     NSRange stringRange = NSMakeRange(0, [mutableAttributedString length]); 
     NSRegularExpression *regexp = ParenthesisRegularExpression(); 
     UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:Size]; 
     DLog(@"%@",italicSystemFont.fontName); 
     CTFontRef italicFont = CTFontCreateWithName((__bridge CFStringRef)italicSystemFont.fontName, italicSystemFont.pointSize, NULL); 
     [regexp enumerateMatchesInString:[mutableAttributedString string] options:0 range:stringRange usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
      if (italicFont) { 
       [mutableAttributedString removeAttribute:(NSString *)kCTFontAttributeName range:result.range]; 
       [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)italicFont range:result.range]; 
       CFRelease(italicFont); 
       NSRange range1 = NSMakeRange (result.range.location, 1); 
       NSRange range2 = NSMakeRange (result.range.location + result.range.length-2, 1); 
       [mutableAttributedString replaceCharactersInRange:range1 withString:@""]; 
       [mutableAttributedString replaceCharactersInRange:range2 withString:@""]; 
      } 
     }]; 
     return mutableAttributedString; 
    }]; 
    return attributedLabel; 
} 
+0

il supprime les parenthèses, mais la police en italique est supprimée ... maintenant, comment vous assurer que les deux est préservée ... – lakesh

+0

Mettez la ligne qui définit le texte dans l'étiquette attribuée au début de la méthode. – ggrana

+0

J'utilise les parenthèses pour différencier le texte en italique et le texte non-italique. – lakesh