Kết xuất nhanh HTML

Nếu bạn muốn hiển thị danh sách chứa các mục trong HTML trong UITableView hoặc UICollectionView, bạn nên sử dụng thư viện bên thứ 3 DTCoreText. Nó nhanh hơn rất nhiều so với cách bản địa. Tôi đã thực hiện một hướng dẫn về nó, ở đây

Khi bạn muốn hiển thị văn bản từ nội dung HTML từ trang web sang ứng dụng của mình, bạn phải chuyển đổi văn bản đó sang định dạng NSAttributionString để hiển thị chính xác trên UITextView/UILabel

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách thực hiện việc này một cách nhanh chóng bằng cách sử dụng tiện ích mở rộng sử dụng màu văn bản, phông chữ tùy chỉnh, v.v. với sự trợ giúp của CSS

Chúng tôi sẽ không đề cập đến cách thêm phông chữ tùy chỉnh vào dự án iOS của bạn trong hướng dẫn này, nhưng chúng tôi sẽ chỉ tập trung vào việc triển khai NSAttributionString

Chỉ cần dán tiện ích mở rộng sau vào Tiện ích mở rộng của bạn. tập tin nhanh chóng.  

extension String { private var convertHtmlToNSAttributedString: NSAttributedString? { guard let data = data[using: .utf8] else { return nil } do { return try NSAttributedString[data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil] } catch { print[error.localizedDescription] return nil } } public func convertHtmlToAttributedStringWithCSS[font: UIFont?, csscolor: String, lineheight: Int, csstextalign: String] -> NSAttributedString? { guard let font = font else { return convertHtmlToNSAttributedString } let modifiedString = "body{font-family: '\[font.fontName]'; font-size:\[font.pointSize]px; color: \[csscolor]; line-height: \[lineheight]px; text-align: \[csstextalign]; }\[self]" guard let data = modifiedString.data[using: .utf8] else { return nil } do { return try NSAttributedString[data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil] } catch { print[error] return nil } } }

Code language: Swift [swift]

Sau đó, chuyển đến chuỗi của bạn mà bạn muốn chuyển đổi thành NSAttributionString và đặt nó như ví dụ bên dưới

Hôm nay, tôi đang làm việc với Thư viện ứng dụng API của Google cho Mục tiêu-C cho REST và khi làm việc truy xuất thư email từ Gmail, tôi nhận thấy rằng Dữ liệu được truyền, sau khi được giải mã từ base64, trong một số trường hợp có chứa HTML. Trong hướng dẫn nhanh này, tôi sẽ cung cấp một ví dụ nhanh về một cách mà bạn có thể hiển thị một chuỗi chứa HTML và đặt nó trong một UITextView

Thay vì trình bày cách truy xuất email từ Gmail, sau đó truy cập chuỗi dữ liệu và thực hiện chuyển đổi để biến nó thành một chuỗi có thể đọc được, tôi sẽ chỉ bắt đầu từ một chuỗi HTML được mã hóa cứng và chỉ ra cách có thể sử dụng chuỗi đó trong một

Chuẩn bị một chuỗi chứa HTML

let messageString = "

A Heading

My first paragraph.

Another Heading

More text

And Another Heading

And done

"

Đầu tiên chúng ta tạo một String và lưu trữ nó trong một hằng số gọi là “messageString”. Đây chỉ là một ví dụ đơn giản về HTML, mặc dù các bố cục HTML phức tạp hơn cũng sẽ hoạt động. Nó có các thẻ H1, H2, H3 và P cũng như các thẻ html và body cần thiết

UITextView

Việc đọc tham chiếu lớp UITextView cho thấy UITextView có thuộc tính văn bản thường được đặt để hiển thị văn bản trong dạng xem. Những gì nó cũng có là một thuộc tính attributeText yêu cầu NSAttributionString để đặt nó. Điều này cho phép UITextView hiển thị văn bản theo kiểu, đó là những gì chúng ta cần

NSAttributionString

NSAttributionString được mô tả là một “chuỗi có các thuộc tính được liên kết [chẳng hạn như kiểu trực quan, siêu liên kết hoặc dữ liệu trợ năng] cho các phần văn bản của nó. ” NSAttributionString chấp nhận Từ điển được sử dụng cho các thuộc tính của văn bản. Đối với nhu cầu của chúng tôi, một trong những tùy chọn mà chúng tôi có thể đặt được sử dụng để chỉ định rằng chúng tôi đang sử dụng HTML

Để tạo NSAttributionString, nó cần Dữ liệu được truyền vào, cũng như một số tùy chọn cung cấp. Trước tiên hãy xem xét việc chuyển đổi chuỗi chứa HTML thành Dữ liệu

let htmlData = NSString[string: messageString!].data[using: String.Encoding.utf8.rawValue]

Những gì chúng tôi làm ở đây là cung cấp messageString và sau đó khởi tạo chuỗi. Sau đó, chúng tôi gọi phương thức dữ liệu yêu cầu sử dụng mã hóa, trong trường hợp này là giá trị thô

Nhiệm vụ tiếp theo là chọn các tùy chọn sẽ được sử dụng

let options = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html]

Trên dòng này, chúng tôi tạo một hằng số, được gọi là các tùy chọn. Ở đây chúng tôi lưu trữ chìa khóa. giá trị tôi đã đề cập ở trên. Trong trường hợp này, chúng tôi chỉ định rằng khóa documentType phải có giá trị là. tài liệu kiểu html

Tạo chuỗi được phân bổ

Bây giờ chúng tôi có dữ liệu html của mình và đã tạo các tùy chọn, giờ chúng tôi có thể tạo NSAttributionString của mình

let attributedString = try! NSAttributedString[data: htmlData!,
                                               options: options,
                                               documentAttributes: nil]

Với NSAttributionString đã sẵn sàng, giờ đây chúng ta có thể đặt thuộc tính attributeText của UITextView để hiển thị văn bản được định dạng. Bạn làm điều đó như sau

messageView.attributedText = attributedString

Giả sử bạn có sẵn UITextView trong Storyboard và đã kết nối nó với IBOutlet, bạn có thể hiển thị bất kỳ HTML nào bạn muốn cung cấp. Điều này đặc biệt hữu ích khi xem tải trọng trên thư Gmail nơi dữ liệu đôi khi được giải mã thành chuỗi HTML

Làm cách nào để sử dụng HTML trong Swift?

Vì vậy gói SwiftHtml chỉ là một tập hợp các quy tắc HTML nằm trên thư viện SwiftSgml và nó tuân theo các hướng dẫn tham khảo HTML của W3C . Bạn có thể sử dụng chuỗi đầu ra để lưu tệp HTML, bằng cách này bạn có thể tạo các trang web tĩnh bằng cách sử dụng thư viện SwiftHtml.

Làm cách nào để hiển thị HTML trong TextView Swift?

Cách hiển thị HTML trong UILabel và UITextView .
Chuỗi HTML
Chuyển đổi sang NSAttributionString
Sự mở rộng
Áp dụng một phong cách
tham số hóa
Tài nguyên liên quan

Làm cách nào để hiển thị văn bản có định dạng HTML trong UILabel Swift?

Hãy thử điều này. hãy gắn nhãn. UILabel. = Chuỗi. stringFromHTML["html String"] func stringFromHTML[ string. Chuỗi?] -> Chuỗi { do { let str = try NSAttributionString[data. sợi dây.

Chủ Đề