Хобрук: Ваш путь к мастерству в программировании

Удаление скобок из UILabel в iOS

Вчера я опубликовал этот вопрос: Удаление скобок из строки в 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;
}

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


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

Ответы:


1

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

[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;
}
29.05.2013
  • он удаляет скобки, но курсивный шрифт удаляется... как теперь убедиться, что оба сохранены... 29.05.2013
  • Поместите строку, которая задает текст в атрибутной метке, в начале метода. 29.05.2013
  • Я использую скобки, чтобы различать курсив и не курсив. 29.05.2013
  • Я обновил ответ, чтобы он лучше соответствовал вашему вопросу. 29.05.2013
  • попробовал ваше редактирование. дает мне ошибку отправки NSString* в параметр несовместимого типа 'NSRange' 29.05.2013
  • Извините, моя ошибка, я забыл, что он ожидает диапазон, изменив код на строку, он должен выглядеть, может быть, вам нужно настроить пару вещей, но я думаю, что вы поняли идею. 29.05.2013
  • давайте продолжим это обсуждение в чате 29.05.2013
  • Новые материалы

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..