Преобразование форматированного текста в обычный текст программно в Swift - PullRequest
0 голосов
/ 04 марта 2019

В приложении TextEdit можно конвертировать Rich Text с помощью следующей процедуры: Format, Make Plain Text.Как я могу выполнить это в Swift?

Я использую платформу NSPasteboard:

let pasteboard = NSPasteboard.general

...

pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)

...

Для получения содержимого буфера обмена:

var clipboardContents = ""

...

clipboardContents = pasteboard.string(forType: .string) ?? "Something went wrong"

Последний оператор возвращает обычный текст в окне консоли, однако не преобразуется в него при использовании содержимого буфера обмена в другом приложении, таком как TextExit и т. Д.Ваша помощь очень ценится!

1 Ответ

0 голосов
/ 04 марта 2019

Вам просто нужно получить данные rtf из вашего монтажного стола, а затем инициализировать новую приписанную строку с ним.После этого вы можете просто получить доступ к строковому свойству NSAttributedString:

import Cocoa
class ViewController: NSViewController {
    @IBOutlet weak var simpleText: NSTextField!
    @IBOutlet weak var labelField: NSTextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        NSPasteboard.general.declareTypes([.rtf, .string], owner: nil)
    }
    @IBAction func pasteAction(_ sender: NSButton) {
        guard let availableType = NSPasteboard.general.availableType(from: [.rtf, .string]) else { return }
        switch availableType {
        case .rtf:
            print("Rich Text Data")
            if let data = NSPasteboard.general.data(forType: .rtf),
                let attributedString = NSAttributedString(rtf: data, documentAttributes: nil)  {
                labelField.attributedStringValue = attributedString
                simpleText.stringValue = attributedString.string
            }
        case .string:
            print("Simple Text")
            if let string =  NSPasteboard.general.string(forType: .string) {
                simpleText.stringValue = string
            }
        default: break
        }
    }
}
...