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.
Code language: Swift [swift]
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 } } }
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