2011-07-03 9 views
11

Thay vì chuyển đổi HTML thành chuỗi được phân bổ, tôi cần phải chuyển đổi HTML trở lại thành HTML. Điều này có thể dễ dàng được thực hiện trên Mac như có thể thấy ở đây: http://www.justria.com/2011/01/18/how-to-convert-nsattributedstring-to-html-markup/HTML từ NSAttributedString

Không may, phương pháp dataFromRange:documentAttributes: chỉ khả dụng trên máy Mac qua NSAttributedString bổ sung AppKit.

Câu hỏi của tôi là làm cách nào bạn có thể thực hiện việc này trên iOS?

Trả lời

7

Không cách 'dễ dàng', nhưng những gì về lặp qua các thuộc tính của chuỗi sử dụng:

- (void)enumerateAttributesInRange:(NSRange)enumerationRange 
          options:(NSAttributedStringEnumerationOptions)opts 
         usingBlock:(void (^)(NSDictionary *attrs, NSRange range, BOOL *stop))block 

Có một biến NSMutableString để tích lũy HTML (cho phép gọi nó là 'html'). Trong khối, bạn sẽ xây dựng HTML theo cách thủ công bằng cách sử dụng chuỗi. Ví dụ nếu các thuộc tính văn bản 'attrs' chỉ định màu đỏ, chữ in đậm:

[html appendFormat:@"<span style='color:red; font-weight: bold;'>%@</span>", [originalStr substringWithRange:range]]


EDIT: cờ này ngày hôm qua:

NSAttributedString + HTMLFromRange loại từ "UliKit" (https://github.com/uliwitness/UliKit/blob/master/NSAttributedString+HTMLFromRange.m)

Có vẻ như nó sẽ làm những gì bạn muốn.

+0

Vâng tôi đã cân nhắc điều đó. Phần khó nhất là xử lý phông chữ để xem chúng có in đậm, in nghiêng hay không. Tôi có thể cung cấp cho nó một đi ngay bây giờ để xem nó hoạt động tốt như thế nào. Cảm ơn! – Joshua

+0

Tuyệt vời, chỉ cần nhận thấy liên kết mới (SO dường như không thông báo khi câu trả lời được chỉnh sửa) mà làm mọi thứ tôi muốn. Cảm ơn rất nhiều! (+1 & ✔) – Joshua

+0

@Joshua Cách này giải quyết vấn đề của bạn? Có vẻ như NSAttributedString + HTMLFromRange có đầy đủ các công cụ OS X-only, phải không? –

1

Sử dụng mã bên dưới. nó hoạt động tốt.

NSAttributedString *s = ...; 
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};  
NSData *htmlData = [s dataFromRange:NSMakeRange(0, s.length) documentAttributes:documentAttributes error:NULL]; 
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding]; 
+0

Công việc này, nhưng nó tạo ra một định dạng HTML 4 chứ không phải HTML 5. – Rob