Нечетные символы появились после копирования / вставки из FileMaker - PullRequest
0 голосов
/ 28 февраля 2020

Когда я пытаюсь скопировать текст из FMP и вставить его в любое текстовое поле моего приложения, вместо копируемого текста я получаю азиатские символы.

Вот пример:

Текст в FMP: GordonValley2 (я вставил его прямо из FMP)

Текст в моем приложении после вставки в панель поиска: 䜀 漀 爀 搀 漀 渀 愀 愀 氀 攀 100 100

У меня нет подклассов панели поиска.

Это пример кода добавления панели поиска:

    searchBar = UISearchBar()
    searchBar.sizeToFit()
    searchBar.placeholder = "Search..."
    searchBar.searchBarStyle = .minimal
    searchBar.isTranslucent = false
    searchBar.showsCancelButton = true
    searchBar.delegate = searchTableController
    searchBarView.addSubview(searchBar)

Это происходит при запуске MacOS. приложение или iOS приложение в симуляторе.

Я пытался проверить текст из монтажной панели в различных методах пользовательского класса текстового поля, таких как shouldChangeCharactersIn из UITextFieldDelegate или в textPasteConfigurationSupporting UITextPasteDelegate, но я всегда получаю что-то вроде этого:

Необязательно - некоторые: {NSColor = "UIExtendedSRGBColorSpace 0,373 0,447 1 1"; NSFont = "\" SFProText-Medium 15,00 pt. P [] (0x1014e55b0) fobj = 0x1014e55b0, spc = 4,10 \ ""; NSParagraphStyle = "Выравнивание 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 4, вкладки (\ n 28L, \ n 56L, \ n 84) n 112L, \ n 140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n 308L, \ n 336L \ n), DefaultTabInterval 0, блоки (ноль), списки (ноль) , BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0 LineBreakStrategy 1 "; NSShadow = "NSShadow {0, -1} color = {(null)}";

Вставка того же текста в панель поиска или любое текстовое поле любых других приложений, таких как Slack, Apple Musi c, Браузер работает хорошо.

Кроме того, копирование / вставка хорошо работает из браузера, PDF-файлов на разных языках и форматированного текста, поэтому я не уверен, как отследить проблему

1 Ответ

0 голосов
/ 26 марта 2020

Мне удалось решить эту проблему с помощью UITextPasteDelegate

Вот пример:

func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: UITextPasteConfigurationSupporting, combineItemAttributedStrings itemStrings: [NSAttributedString], for textRange: UITextRange) -> NSAttributedString {

    if itemStrings.count == 1, let first = itemStrings.first {
        ///remove all attributes

        let pasteBoard = UIPasteboard.general
        let options: [NSAttributedString.DocumentReadingOptionKey : Any] = [
            .documentType: NSAttributedString.DocumentType.rtf
        ]
        if
            let data = pasteBoard.data(forPasteboardType: "public.rtf"),
            let attString = try? NSAttributedString(data: data,
                                                    options: options, documentAttributes: nil){

            return attString
        }

        return NSAttributedString(string: first.string)
    }

    return NSAttributedString()
}

Этот код, однако, удалит все атрибуты шрифта из строки, поэтому будет лучше применить их обратно для чистой строки

РЕДАКТИРОВАТЬ: Этот код работает нормально, я сделал улучшения и переместил код в метод textFieldSHouldChangeCharacters ... и удалил делегат pasteConfiguration.

Но по какой-то причине эта строка:

let data = pasteBoard.data (forPasteboardType: "publi c .rtf")

Вызывает cra sh в MacOS

...