Как скопировать текст в буфер обмена / вставить в Swift

184

Я ищу чистый пример того, как скопировать текст в буфер обмена iOS, который затем может быть использован / вставлен в другие приложения.

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

Я предполагаю, что ключевые классы находятся в UIPasteboard, но не могут найти соответствующие области в примере кода, который они предоставляют .

Гарри Лоу
источник

Ответы:

449

Если все, что вам нужно, это простой текст, вы можете просто использовать stringсвойство . Это и для чтения и для записи:

// write to clipboard
UIPasteboard.general.string = "Hello world"

// read from clipboard
let content = UIPasteboard.general.string

(При чтении из буфера обмена документация UIPasteboard также предлагает вам сначала проверить hasStrings, «чтобы система не вызывала ненужных попыток извлечения данных до того, как она понадобится, или когда данные могут отсутствовать», например, при использовании Handoff .)

jtbandes
источник
Это может работать нормально, но не случается ли так, что у пользователя есть скопированные изображения или файлы?
победитель
UIPasteboard.general.stringтоже работает в swift 4.x
spnkr
Как я могу скопировать шрифт со стилем шрифта?
Крунал Нагвадия
57

Поскольку копирование и вставка обычно выполняются парами, это дополнительный ответ на хороший и краткий ответ @jtbandes. Я изначально пришел сюда, чтобы посмотреть, как вставить.

iOS делает это легко, потому что общий монтажный щит можно использовать как переменную. Просто возьми и установи UIPasteboard.general.string.

Вот пример, показывающий, как оба используются с UITextField:

копия

UIPasteboard.general.string = myTextField.text

Вставить

if let myString = UIPasteboard.general.string {
    myTextField.insertText(myString)
}

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

Suragch
источник
Как я могу скопировать текст со стилем шрифта. Так что я могу использовать этот стиль шрифта
Krunal Nagvadia
@KrunalNagvadia, Вы не можете копировать текст со стилем шрифта, но вы можете получить информацию о шрифте с myTextField.font. Вы можете сохранить эту информацию отдельно и применить ее в другом месте.
Suragch
Хорошо, что, если я скопирую текст из моего приложения и вставлю в WhatsApp или любое другое приложение. Поддерживает ли он стиль поддержки?
Крунал Нагвадия
@KrunalNagvadia, нет, система iOS UIPasteboardне поддерживает стилизацию. Вы можете обрабатывать стили только в своем приложении.
Suragch
7

Копирование текста из приложения в буфер обмена:

let pasteboard = UIPasteboard.general
pasteboard.string = employee.phoneNumber
Радж Джоши
источник
7

SWIFT 4

UIPasteboard.general.string = "TEXT"
Альваро Агуэро
источник