2015-11-26 9 views
0

Я добавил файл .txt для объединения, и этот файл состоит из пяти абзацев , и каждый абзац имеет заголовок. Я успешно загружаю этот файл .txt в строковую переменную и отображаю текст в моем UITextView. Но i хотят, чтобы каждый заголовок имел разный шрифт, и каждый абзац имел другой размер шрифта. Пожалуйста, помогите мне.Как загрузить txt-файл в UITextView с атрибутомString?

Я использую следующий код:

NSString *path = [[NSBundle mainBundle]pathForResource:@"License" ofType:@"txt"]; 
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
[self.textView setText:content]; 

ответ

0

Вы можете использовать NSAttributedString, набор текста Шрифт, цвета текста и фона, зачеркивания и тени и т.д ..

приписывали строк сделать связь между символами и их атрибуты. Как и объекты NSString, существуют два варианта: NSAttributedString и NSMutableAttributedString. Хотя предыдущие версии iOS поддерживали присваиваемые строки, это было только после того, как iOS 6, который управляет такими кнопками, ярлыками, текстовыми полями и текстовыми полями, определил свойство управлять атрибутами. Атрибуты применяются к ряду символов, поэтому вы можете, например, установить атрибут strikethrough только для части строки. Также важно отметить, что шрифт по умолчанию для атрибутов строковых объектов - это 12-точечная версия Helvetica. Имейте это в виду, если вы установите атрибут шрифта для диапазона, отличного от полной строки. Следующие атрибуты могут быть установлены с приписываемых строками:

NSString *const NSFontAttributeName; 
NSString *const NSParagraphStyleAttributeName; 
NSString *const NSForegroundColorAttributeName; 
NSString *const NSBackgroundColorAttributeName; 
NSString *const NSLigatureAttributeName; 
NSString *const NSKernAttributeName; 
NSString *const NSStrikethroughStyleAttributeName; 
NSString *const NSUnderlineStyleAttributeName; 
NSString *const NSStrokeColorAttributeName; 
NSString *const NSStrokeWidthAttributeName; 
NSString *const NSShadowAttributeName; 
NSString *const NSVerticalGlyphFormAttributeName; 



// Create attributed string 
NSString *str = @"example for underline \nexample for font \nexample for bold \nexample for italics"; 

NSMutableAttributedString *attributedString = 
[[NSMutableAttributedString alloc] initWithString:str]; 

// Add attribute NSUnderlineStyleAttributeName 
[attributedString addAttribute:NSUnderlineStyleAttributeName 
        value:[NSNumber numberWithInt:NSUnderlineStyleSingle] 
        range:NSMakeRange(12, 9)]; 
[attributedString addAttribute:NSUnderlineStyleAttributeName 
        value:[NSNumber numberWithInt:NSUnderlineStyleSingle] 
        range:NSMakeRange(12, 9)]; 

// Set background color for entire range 
[attributedString addAttribute:NSBackgroundColorAttributeName 
        value:[UIColor yellowColor] 
        range:NSMakeRange(0, [attributedString length])]; 


// Create NSMutableParagraphStyle object 
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; 
paragraph.alignment = NSTextAlignmentCenter; 

// Add attribute NSParagraphStyleAttributeName 
[attributedString addAttribute:NSParagraphStyleAttributeName 
        value:paragraph 
        range:NSMakeRange(0, [attributedString length])]; 



// Set font, notice the range is for the whole string 
UIFont *font = [UIFont fontWithName:@"Helvetica" size:18]; 
[attributedString addAttribute:NSFontAttributeName 
        value:font 
        range:NSMakeRange(35, 4)]; 



// Set font, notice the range is for the whole string 
UIFont *fontBold = [UIFont fontWithName:@"Helvetica-Bold" size:18]; 
[attributedString addAttribute:NSFontAttributeName 
        value:fontBold 
        range:NSMakeRange(53, 4)]; 

// Set font, notice the range is for the whole string 
UIFont *fontItalics = [UIFont fontWithName:@"Helvetica-Oblique" size:18]; 
[attributedString addAttribute:NSFontAttributeName 
        value:fontItalics 
        range:NSMakeRange(71, 7)]; 



// Set label text to attributed string 
[self.mytextView setAttributedText:attributedString]; 

Для получения дополнительной информации см here

0

Это может помочь

self.textView.attributedText = 
[ NSAttributedString.alloc 
    initWithFileURL:[ NSBundle.mainBundle URLForResource:@"License" withExtension:@"txt" ] 
    options:nil 
    documentAttributes:nil 
    error:err]; 

Edit: если каждый из отдельных слов или символов или пункт должен быть формат то лучше использовать html-код и загрузить его с помощью NSAttributedString. Thanks

+0

Я получил обычный текст из txt-файла, тогда я хочу установить атрибутивную строку для извлечения. Возможно ли это? – IKKA

+1

, тогда вы используете текстовый файл load html –

+0

отметьте его правильным ответом, если он решит вашу проблему. –

0

Моя функция расширения для преобразования html в NSAttributedString. Если License.txt составлен синтаксисом html, он может напрямую преобразовать его в NSAttributedString.

@implementation NSString (Html) 
- (NSAttributedString *)htmlToAttributeString 
{ 
    NSAttributedString *str = [[NSAttributedString alloc] initWithData:[self dataUsingEncoding:NSUTF8StringEncoding] 
                   options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
                     NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                documentAttributes:nil 
                   error:nil]; 
    return str; 
} 
@end