Как получить текст из UIPasteboard после ввода фона, копирования нового текста и возврата в приложение? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь получить доступ к самому последнему элементу в UIPasteboard, в частности, проблема, с которой я сталкиваюсь, заключается в том, что, когда я создаю фоновый рисунок приложения, копирую другой фрагмент текста и возвращаюсь в приложение, я вижу UIPasteboard.general.string вернуть ноль. Теперь я прочитал, что причина, по которой он возвращает ноль, когда я возвращаюсь к приложению, заключается в том, что это новая мера безопасности, реализованная Apple, но есть ли надежный способ обойти это поведение?

Я видел несколько приложений, которые позволяют пользователю копировать и вставлять столько, сколько они хотят, независимо от того, являются ли они фоном приложения или нет, поэтому я знаю, что это можно сделать, но я не могу ничего найти в интернете.

Вот пример кода, который я использую, который печатает ноль:

@objc func pasteText() {
    print("Here's the string: \(UIPasteboard.general.string)")
    if let pasteboardText = UIPasteboard.general.string {
        self.searchBar.text = pasteboardText
    }
}

После копирования нового текста и возврата в приложение, когда я нажимаю кнопку вставки, консоль показывает Вот строка: nil . Я не делаю ничего особенного, просто получаю доступ к строке прямо из UIPasteboard.

Доступ к буферу обмена довольно прост, поэтому я не думаю, что делаю это неправильно. Я думаю, может быть, мне нужно написать какой-нибудь код в AppDelegate, чтобы получить недавно скопированный текст после возвращения в приложение из фона? Это жизнеспособный подход?

Любое руководство будет с благодарностью.

Функция вставки работает только после того, как я скопирую некоторый текст за пределы приложения, нажмите кнопку режима сна и затем вернитесь обратно в приложение, только тогда самый последний элемент в UIPasteboard обновится правильно и будет работать как обычно. Не совсем уверен, почему мое приложение имеет такое поведение.

Исправлена ​​моя проблема:

Похоже, ни у кого больше не было проблем с доступом к тексту с UIPasteboard, но в моем случае я решил эту проблему. Мне кажется, что UIPasteboard.general.string был установлен равным нулю вскоре после возвращения в приложение, но в моем appdelegate метод жизненного цикла applicationWillEnterForeground похоже, что после возвращения в приложение правильно, скопированный текст кратко поддерживается. Простым решением, которое я придумал, была установка UIPasteboard.general.string на себя, код ниже объясняет все это:

if let recentlyCopiedText = UIPasteboard.general.string {
    UIPasteboard.general.string = recentlyCopiedText
}

Когда я ссылаюсь на UIPasteboard.general.string позже, он вставляет правильное значение. Надеюсь, это поможет кому-то, если у него возникнут проблемы с чтением с UIPasteboard.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Я использую Swift 4.2. Вот шаги, которые я выполнил:

  1. Открытое приложение.
  2. Отправлено приложение в фон.
  3. Пошел в Safari
  4. Скопировал URL
  5. Доступ к моему приложению осуществляется с помощью метода ниже. И это работает.

let newStringCopied = UIPasteboard.general.string

Повторите, надеюсь, это поможет вам.

0 голосов
/ 19 июня 2019

Вот что я сделал ..
Я открываю свое демо-приложение и захожу в фоновом режиме, затем открываю приложение для сообщений по умолчанию на iphone, набираю сообщение и просто выбираю все, копирую контент и снова возвращаюсь в свое приложение. У меня есть кнопка при нажатии. ПростоРаспечатать .

print(UIPasteboard.general.string) 

и он успешно печатает последнее скопированное содержимое.
, поэтому, пожалуйста, проверьте, работает ли он или нет.

...