2015-04-14 2 views
3

Это работает для обычного NSString:Заменить символ в NSMutableAttributedString

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

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

ответ

1

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

+0

У меня уже есть приписываемое строку. Он может включать текстовые вложения и т. Д. Я знаю, что мне нужно использовать replaceCharactersInRange: withString, но, как вы сказали, я не знаю диапазонов. – soleil

+0

Вот почему вы предпочли бы «исправить» первую строку. Вы можете получить 'string' - обычную версию атрибутной строки - и найти диапазон целевой строки. Но вам нужно получить его на каждой итерации, поскольку вы будете мутировать исходную строку или отслеживать диапазон мутаций ... – Wain

1
NSString *newString= "I want to ,show, you how to achieve this"; 
NSMutableAttributedString *displayText = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",newString]]; 
[[displayText mutableString] replaceOccurrencesOfString:@"," withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, displayText.string.length)]; 
+1

Вы, кажется, смешиваете простые и приписываемые строки здесь ... – Wain

+0

Первая версия не работает , потому что вы назначили неизменяемую строку newString. Вторая версия: Почему вы используете stringWithFormat? – gnasher729

0

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

0

Код может быть применен от моего ответа here:

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]; 
    } 
1
let attrString = NSMutableAttributedString(string: "Hello <b>friend<b>") 

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

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

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