【问题标题】:Removing brackets from UILabel in iOS [duplicate]从iOS中的UILabel中删除括号[重复]
【发布时间】:2013-05-29 13:23:35
【问题描述】:

我昨天发布了这个问题:Removing parentheses from the string in 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;
}

仍然无法删除括号。谁能指出我的错误?非常感谢您的帮助。

【问题讨论】:

  • 我认为你的意思是括号,你试图删除这个字符,“[”对
  • 说错了。编辑了问题。
  • 我明白你在做什么。我所做的是修改MGMushParser(GitHub 上的一个库)以获得我想要的结果。它将解析某些“标签”(在您的情况下为 [斜体文本])并将其替换为某些属性。

标签: ios objective-c uilabel nsmutableattributedstring


【解决方案1】:

尝试将最后两行换成这两行:

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

以string...开头的方法不会改变字符串本身,只会返回一个被改变的新字符串。

顺便说一下,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;
}

【讨论】:

  • 它删除了括号但斜体字体被删除了......现在你如何确保两者都被保留......
  • 将设置文本的行放在方法开头的属性标签中。
  • 我使用括号来区分斜体文本和非斜体文本。
  • 我更新了答案以更好地匹配您的问题。
  • 尝试了您的编辑。给我一个错误“将 NSString* 发送到不兼容类型 'NSRange' 的参数”
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2020-06-12
  • 2023-02-06
相关资源
最近更新 更多