Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
#1

NSAttributedString - Как вставить HTML? - Objective-C

23.09.2014, 12:15. Просмотров 1309. Ответов 9
Метки нет (Все метки)

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    NSString *string = @"<p>ewrtgh</p><p>werg</p><p>werg</p>";
    NSData *textData = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *options = @{
                                NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)
                              };
    NSError *error = nil;
    NSAttributedString *textAttributedString = [[NSAttributedString alloc] initWithData:textData
                                                                                options:options
                                                                     documentAttributes:nil
                                                                                  error:&error];
    if (error != nil)
    {
        NSLog(@"Ошибка: %@", error);
    }
Ошибка: Error Domain=NSCocoaErrorDomain Code=259 "The operation couldn’t be completed. (Cocoa error 259.)"

Помогите пожалуйста исправить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
23.09.2014, 13:52     NSAttributedString - Как вставить HTML? #2
NSAttributedString - Как вставить HTML?
https://github.com/honcheng/RTLabel
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
24.09.2014, 00:09  [ТС]     NSAttributedString - Как вставить HTML? #3
не поддерживает списки

Добавлено через 5 минут
<ul><li>
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.09.2014, 01:16     NSAttributedString - Как вставить HTML? #4
не поддерживает списки

Добавлено через 5 минут
<ul><li>
Для особо тяжелых HTML только UIWebview, либо подгототавливайте вашу верстку под поддерживаемые теги.
Vorona
24.09.2014, 02:28
  #5

Не по теме:

Цитата Сообщение от noname_club Посмотреть сообщение
https://github.com/honcheng/RTLabel
вот это дичь, при чем тут html к cocoa, давайте еще javascript инъекции делать в куски экрана...

noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.09.2014, 03:23     NSAttributedString - Как вставить HTML? #6
вот это дичь, при чем тут html к cocoa, давайте еще javascript инъекции делать в куски экрана...
Вы видимо не знакомы с CoreText.framework

RTLabel это просто обертка над ним, которая упрощает "рисование текста"
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
24.09.2014, 08:27     NSAttributedString - Как вставить HTML? #7
vitalik_a, воспользуйтесь DTCoreText.
В нем есть класс DTHTMLAttributedStringBuilder.
Работать нужно например так:
Objective-C
1
2
3
4
5
- (NSAttributedString *)attributedDescription {
    NSDictionary *dict = @{DTUseiOS6Attributes : @YES, DTDefaultFontSize: @(15.f), DTDefaultFontFamily : @"Avenir Next"};
    DTHTMLAttributedStringBuilder *builder = [[DTHTMLAttributedStringBuilder alloc] initWithHTML:[self.htmlDescription dataUsingEncoding:NSUTF8StringEncoding] options:dict documentAttributes:&dict];
    return builder.generatedAttributedString;
}
P.S Сразу скажу, что картинки НЕ поддерживает он. Если захотите еще картинки - выход у вас будет один - UIWebView. Остальное слишком громоздко и сложно(Да и в opensource я не видел решений).
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
24.09.2014, 14:03  [ТС]     NSAttributedString - Как вставить HTML? #8
у меня заработал код из первого поста, оказалось
Objective-C
1
2
3
4
NSAttributedString *textAttributedString = [[NSAttributedString alloc] initWithData:textData
                                                                                options:options
                                                                     documentAttributes:nil
                                                                                  error:&error];
не работает в фоновом потоке, его надо в блоке отправить в основной:
Objective-C
1
2
3
4
    dispatch_sync(dispatch_get_main_queue(),
                   ^(void)
                   {
                   });
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
24.09.2014, 17:18     NSAttributedString - Как вставить HTML? #9
у меня заработал код из первого поста, оказалось
Отлично, поскольку IOS8 уже вышла, следовательно IOS6 ушла в небытие. А это значит теперь открыт нативный метод HTML рендеринга без подключения дополнительных библиотек. IOS7+

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// только для IOS7+
    
    NSString * url = [[NSBundle mainBundle] pathForResource:@"01.html" ofType:nil];
    NSData * data = [NSData dataWithContentsOfFile:url];
    
    NSDictionary * options = @{
                               NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                               NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)
                               };
    
    NSAttributedString * str = [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil];
    
    // отступы 5x8
    
    CGRect z = [str boundingRectWithSize:CGSizeMake(_textView.frame.size.width - 5*2, MAXFLOAT) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:0];
    
    z.size.height += 8*2;
    
    NSLog(@"TEXT HEIGHT IS %f", z.size.height);
    
    CGRect frame = _textView.frame;
    frame.size.height = z.size.height;
    
    _textView.frame = frame;
    
    _textView.attributedText = str;
NSAttributedString - Как вставить HTML?

Исходник прикреплен.

Офф документация:
https://developer.apple.com/library/...umentAttribute
Вложения
Тип файла: zip NSAttributedString HTML.zip (216.5 Кб, 7 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2015, 14:22     NSAttributedString - Как вставить HTML?
Еще ссылки по теме:
Как вставить html страничку в MasterPage? C# ASP.NET
Как вставить Java код в html JavaFX
HTML, CSS Как вставить html в атрибут value input?
PHP Как вставить в HTML содержимое CLOB
Как вставить в html код .xls HTML, CSS

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alexandr201501
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 1
01.06.2015, 14:22     NSAttributedString - Как вставить HTML? #10
У меня приложение запускается долго, и в лог идут сообщения
Objective-C
1
2
3
2015-06-01 17:20:32.372 NSAttributedString HTML[79851:432169] +[CATransaction synchronize] called within transaction
2015-06-01 17:20:32.374 NSAttributedString HTML[79851:432169] +[CATransaction synchronize] called within transaction
2015-06-01 17:20:32.602 NSAttributedString HTML[79851:432169] TEXT HEIGHT IS 298.875977
Yandex
Объявления
01.06.2015, 14:22     NSAttributedString - Как вставить HTML?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru