How to let the user paste data into your app
iOS 16+
SwiftUI has a dedicated PasteButton
view that lets us receive any kind of data that conforms to the Transferable
protocol, such as String
and Data
.
For example, we could let the user type into a text field, or add a PasteButton
to update the text directly:
struct ContentView: View {
@State private var username = "blog.arturofm.com"
var body: some View {
VStack {
TextField("Username", text: $username)
.textFieldStyle(.roundedBorder)
PasteButton(payloadType: String.self) { strings in
guard let first = strings.first else { return }
username = first
}
.buttonBorderShape(.capsule)
}
.padding()
}
}
Notice how we specify String.self
as the payload type, but the input into the closure is an array of strings.
Given that TextField
has its own cut, copy, and paste menu options, I think PasteButton
will be much more useful in places where you aren’t handling text, e.g. when the user wants to paste a picture into your app.