2013-05-29 3 views
1

Я разместил этот вопрос вчера: Removing parentheses from the string in iOS. Но я еще не могу удалить скобки с этикетки.Снятие кронштейнов от UILabel в iOS

Не уверен, что моя ошибка. Проводил всю ночь, размышляя, все еще не в состоянии это сделать.

Я использую TTTAttributedLabel. Мой код выглядит так:

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

По-прежнему не удается снять скобки. Может ли кто-нибудь указать на мою ошибку? Было бы очень полезно помочь.

+0

Я думаю, что вы имеете в виду скобки, вы пытаетесь удалить этот символ, "[" право – aaronman

+0

сказал, что это неправильно. отредактировал вопрос. – lakesh

+0

Я вижу, что вы пытаетесь сделать. То, что я сделал, это изменить «MGMushParser» (библиотека GitHub), чтобы получить результат, который я хотел. Он будет анализировать определенные «теги» (в вашем случае [курсивный текст]) и заменять его некоторыми атрибутами. – borrrden

ответ

2

Попробуйте изменить две последние строки с этим два:

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

Методы, которые начинаются с строкой ... не изменяет строку сами только возвращает новую строку, которая изменяется.

Кстати, объекты NSString неизменяемы. Если вы хотите изменить строки, вы можете использовать NSMutableString, в приведенной ниже реализации используется только NSMutabeString, которую вы уже используете в блоке.

-

Попробуйте:

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

удаляет скобки, но курсивный шрифт удален ... теперь как вы гарантируете, что оба сохранены ... – lakesh

+0

Поместите строку, которая устанавливает текст в атрибутной метке в начале метода. – ggrana

+0

Я использую скобки, чтобы различать курсив и текст без курсива. – lakesh

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