2013-03-08 4 views
2

Как выбрать только полужирный и курсивом текст, введенный пользователем в текстовом полеField/textView?Выделить полужирный и курсивный текст textField

Мы можем сделать выделенный текст полужирный, наклонным, подчеркивание и любое сочетание этих трех, но что о его наоборот.

* Это не относится к Mac OSX или iOS, решение в одном из них подходит для меня.

EDIT:

Я попытался, читая текст в приписываемой строки, как:

NSAttributedString *string=self.textView.string; 

Но TextView и TextField возвращает NSString так все форматирование теряется.

+0

они возвращаются attributedText слишком КСН и на OSX attributedStringValue –

+0

@ DAij-Джан: да я проверил его там, спасибо, теперь я могу сделать что-то с Это. :) –

+0

вопрос все еще «открыт» - был ли ответ не в порядке? –

ответ

7

на прошивке использовать attributedText свойство с этикеткой/TextFields

на OSX использование attributedStringValue

, то вы можете перечислить через атрибуты attributedText и проверьте каждый атрибут. Ill хлыст вверх некоторый код (OSX & IOS)

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"none "]; 

id temp = [[NSAttributedString alloc] initWithString:@"bold " attributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:12]}]; 
[str appendAttributedString:temp]; 

temp = [[NSAttributedString alloc] initWithString:@"italic " attributes:@{NSFontAttributeName: [UIFont italicSystemFontOfSize:12]}]; 
[str appendAttributedString:temp]; 

temp = [[NSAttributedString alloc] initWithString:@"none " attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12]}]; 
[str appendAttributedString:temp]; 

temp = [[NSAttributedString alloc] initWithString:@"bold2 " attributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:12]}]; 
[str appendAttributedString:temp]; 

self.label.attributedText = str; 

NSMutableString *italics = [NSMutableString string]; 
NSMutableString *bolds = [NSMutableString string]; 
NSMutableString *normals = [NSMutableString string]; 

for (int i=0; i<str.length; i++) { 
    //could be tuned: MOSTLY by taking into account the effective range and not checking 1 per 1 
    //warn: == might work now but maybe i'd be cooler to check font traits using CoreText 
    UIFont *font = [str attribute:NSFontAttributeName atIndex:i effectiveRange:nil]; 
    if(font == [UIFont italicSystemFontOfSize:12]) { 
     [italics appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]]; 
    } else if(font == [UIFont boldSystemFontOfSize:12]){ 
     [bolds appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]]; 
    } else { 
     [normals appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]]; 
    } 
} 

NSLog(@"%@", italics); 
NSLog(@"%@", bolds); 
NSLog(@"%@", normals); 

Теперь вот как его найти. Выделение диапазона выбора из этого должно быть легким peasy :)

Примечание: вы можете иметь только непрерывный выбор! ни на OSX, ни на КСН вы можете выбрать п частей текстовое поле/TextView

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