Заменить символ в NSMutableAttributedString

Это работает для обычного NSString:

NSString *newString = [myString stringByReplacingOccurrencesOfString:@"," withString:@""];

Но для NSMutableAttributedString такого метода нет. Как я могу удалить все экземпляры запятой в NSMutableAttributedString?


person soleil    schedule 14.04.2015    source источник


Ответы (5)


let attrString = NSMutableAttributedString(string: "Hello <b>friend<b>")

attrString.mutableString.replaceOccurrencesOfString("<b>", withString: "", options: NSStringCompareOptions.CaseInsensitiveSearch, range: NSRange(location: 0, length: attrString.length))

Попробуй это :)

person Augustine P A    schedule 21.07.2016

Сделайте это перед созданием строки с атрибутами, если можете, или в зависимости от того, как вы ее получаете. Если вы не можете, вы можете использовать replaceCharactersInRange:withString: (или replaceCharactersInRange:withAttributedString:), но вам нужно знать диапазон, поэтому вам нужно искать и повторять самостоятельно.

person Wain    schedule 14.04.2015
comment
У меня уже есть атрибутированная строка. Он может включать текстовые вложения и т. д. Я знаю, что должен использовать replaceCharactersInRange:withString, но, как вы сказали, я не знаю диапазонов. - person soleil; 14.04.2015
comment
Вот почему вы бы предпочли сначала «исправить» строку. Вы можете получить string — простую версию строки с атрибутами — и найти диапазон целевой строки. Но вам нужно получать его на каждой итерации, так как вы будете изменять исходную строку или отслеживать диапазон мутаций... - person Wain; 14.04.2015

Вы можете инициализировать атрибутированную строку разделенной строкой с помощью разработанного init. Нет?

person jalone    schedule 14.04.2015

Код можно применить из моего ответа здесь:

NSAttributedString *attributedString = ...;
NSAttributedString *anotherAttributedString = ...; //the string or characters which will replace

while ([attributedString.mutableString containsString:@"replace"]) {
        NSRange range = [attributedString.mutableString rangeOfString:@"replace"];
        [attributedString replaceCharactersInRange:range  withAttributedString:anotherAttributedString];
    }
person Darius Miliauskas    schedule 25.03.2016

person    schedule
comment
Первая версия не работала, потому что вы присвоили newString неизменяемую строку. Вторая версия: с какой стати вы используете stringWithFormat? - person gnasher729; 14.04.2015