In Swiftui we have three special purpose buttons:
- EditButton
- RenameButton
- PasteButton
EditButton


Clicking on the EditButton, the items of the list are displayed with the delete (if onDelete is defined) and move (if onMove is defined) actions. Take a look at the code:
struct ContentView: View {
var names = ["nicola", "tom"]
@State private var pastedText: String = ""
var body: some View {
NavigationStack {
List {
ForEach (names, id:\.self) { name in
Text(name)
}
.onDelete(perform: {_ in
})
.onMove(perform: { indices, newOffset in
})
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
EditButton()
}
}
}
}
}
Very simple and powerful button.
RenameButton
The RenameButton is displayed as a pencil icon and triggers the rename action.

The code:
struct ContentView: View {
var names = ["nicola", "tom"]
@State private var pastedText: String = ""
var body: some View {
NavigationStack {
List {
ForEach (names, id:\.self) { name in
Text(name)
}
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
RenameButton()
}
}.renameAction {
// Your code
}
}
}
}
PasteButton

Clicking on the PasteButton pastes the code that we copied earlier from another place (in this case, it was copied by X).
Take a look at the code:
struct ContentView: View {
@State private var pastedText: String = "
var body: some View {
VStack {
PasteButton(payloadType: String.self) { strings in
pastedText = strings[0]
}
Divider()
Text(pastedText)
Spacer()
}
}
}
Thus, tapping the button pastes the item (in this case, a string, which is copied into a string variable).
If you want to copy and paste an image, the code is this:
import SwiftUI
import UniformTypeIdentifiers
struct ContentView: View {
@State private var image: UIImage?
var body: some View {
VStack {
PasteButton(supportedContentTypes: [UTType.image]) { info in
for item in info {
item.loadObject(ofClass: UIImage.self) { item, error in
if let img = item as? UIImage {
image = img
}
}
}
}
Divider()
Image(uiImage: image ?? .init())
}
.padding()
}
}
Happy buttons.
Note: English is not my native language, so I apologize for any errors. I use AI solely to generate the banner of the post; the content is human-generated.