[Swift4] Sử dụng UITextView để hiển thị text trong file định dạng RichTextFile(rtf)

Vâng mình xin giới thiệu cách sử dụng UITextView để hiển thị text trong các file định dạng (*.rtf)

Luồng thao tác sẽ như sau

  • Import rtf vào mainbundle
  • từ file rtf create NSAttributeStrings
  • Assign vào property attributedText của UITextView

Import rtf vào mainbundle

Như ở ví dụ của mình mình sử dụng file Terms.rtf để import vào main bundle

Từ file rtf create NSAttributeStrings

Ở file code dưới đây mình đã tạo method getTermAttributeString. và trong đó tạo NSAttributeStrings

enum FileError: Error {
    case notExitPath
    case faildRead
}

func getTermAttributeString() throws -> NSAttributedString {

        if let url =  Bundle.main.url(forResource: "Terms", withExtension: "rtf") {
            do {
                let terms = try Data(contentsOf: url)
                let attributeString = try NSAttributedString(data: terms, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil)
                return attributeString

            } catch let error {
                print("ファイルの読み込みに失敗しました: \(error.localizedDescription)")
                throw FileError.faildRead
            }
        } else {
            throw FileError.notExitPath
        }
    }

Mình sẽ giải thích các bước trong đoạn code trên

if let url =  Bundle.main.url(forResource: "Terms", withExtension: "rtf")

Ta sử dụng hàm Bundle.main.url để bắt URL của file trong main bundle.

try NSAttributedString(data: terms, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil)

Ở đây ta khởi tạo NSAttributedString và trong options ta chỉ định document type là [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf] Đến đây là ta có thể tạo được NSAttributedString từ RichTextFormat

Assign vào property attributedText của UITextView

NSAttributedString đã được tạo chúng ta assign vào attributedText bằng đoạn code này

termsTextView.attributedText = try viewModel.getTermAttributeString()

Tham khảo

Nguồn bài dịch : Qiita

All Rights Reserved