Cómo copiar texto al portapapeles / cartón con Swift

184

Estoy buscando un ejemplo claro de cómo copiar texto al portapapeles de iOS que luego se puede usar / pegar en otras aplicaciones.

El beneficio de esta función es que el texto se puede copiar rápidamente, sin las funciones de resaltado de texto estándar de la copia de texto tradicional.

Supongo que las clases clave están en UIPasteboard, pero no puedo encontrar las áreas relevantes en el ejemplo de código que proporcionan .

Garry Law
fuente

Respuestas:

449

Si todo lo que desea es texto sin formato, puede usar la stringpropiedad . Es legible y escribible:

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

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

(Al leer desde el portapapeles, la documentación de UIPasteboard también sugiere que desee verificar primero hasStrings, "para evitar que el sistema intente buscar datos innecesariamente antes de que sea necesario o cuando los datos no estén presentes", como cuando se usa Handoff .)

jtbandes
fuente
Esto puede estar funcionando bien, pero ¿no sucede que el usuario tiene imágenes o archivos en su contenido copiado?
vencedor el
UIPasteboard.general.stringtambién funciona en swift 4.x
spnkr
¿Cómo puedo copiar fuente con estilo de fuente?
Krunal Nagvadia
57

Como la copia y el pegado generalmente se realizan en pares, esta es una respuesta complementaria a @jtbandes, una respuesta buena y concisa. Originalmente vine aquí buscando cómo pegar.

iOS lo hace fácil porque el tablero general se puede usar como una variable. Solo ponte y ponte UIPasteboard.general.string.

Aquí hay un ejemplo que muestra que ambos se usan con un UITextField:

Copiar

UIPasteboard.general.string = myTextField.text

Pegar

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

Tenga en cuenta que la cadena de cartón es Opcional, por lo que primero debe desenvolverse.

Suragch
fuente
¿Cómo puedo copiar texto con estilo de fuente? Así que puedo usar ese estilo de fuente
Krunal Nagvadia
@ KrunalNagvadia, no puede copiar texto con el estilo de fuente, pero puede obtener la información de la fuente myTextField.font. Puede guardar esa información por separado y aplicarla en otro lugar.
Suragch
¿Qué sucede si copio texto de mi aplicación y lo pego en WhatsApp o en cualquier otra aplicación?
Krunal Nagvadia
@ KrunalNagvadia, No, el sistema iOS UIPasteboardno es compatible con el estilo. Solo puede manejar el estilo dentro de su propia aplicación.
Suragch
7

Copiar texto de la aplicación al portapapeles:

let pasteboard = UIPasteboard.general
pasteboard.string = employee.phoneNumber
Raj Joshi
fuente
7

SWIFT 4

UIPasteboard.general.string = "TEXT"
Álvaro Agüero
fuente