Skip to main content

How to let users select text

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to let users select text 관련

SwiftUI by Example

Back to Home

How to let users select text | SwiftUI by Example

How to customize the way links are opened

Updated for Xcode 15

New in iOS 15

Swift's Text views represent static, unselectable text by default, but you can change that using the .textSelection() modifier with the .enabled value.

For example, this makes some text the user can select, and some the user cannot:

VStack(spacing: 50) {
    Text("You can't touch this")

    Text("Break it down!")
        .textSelection(.enabled)
}

Download this as an Xcode projectopen in new window

The line “You can't touch this” above the line “Break it down!”. A selection menu hovers over the second line.
The line “You can't touch this” above the line “Break it down!”. A selection menu hovers over the second line.

When text is selected, the user automatically gains access to the regular text actions such as Copy and Share. However, right now at least the whole text area is copied – you don't get a text selection loupe, so you can't select just a few words.

Setting textSelection() on any kind of group of views will automatically make all text inside that group selectable. For example, we could make both text views in our previous example selectable by moving the modifier up to the stack:

VStack(spacing: 50) {
    Text("You can't touch this")
    Text("Break it down!")
}
.textSelection(.enabled)

Download this as an Xcode projectopen in new window

The line “You can't touch this” above the line “Break it down!”. A selection menu hovers over the first line.
The line “You can't touch this” above the line “Break it down!”. A selection menu hovers over the first line.

You can even apply textSelection() to a list, in which case the text rows in the list become selectable:

List(0..<100) { index in
    Text("Row \(index)")
}
.textSelection(.enabled)

Download this as an Xcode projectopen in new window

A list consisting of rows of text. The first row has a selection menu hovering beneath it.
A list consisting of rows of text. The first row has a selection menu hovering beneath it.

Tips

You need to press and hold directly on the text in a row rather than anywhere else.

Similar solutions…
How to let users select pictures using PhotosPicker | SwiftUI by Example

How to let users select pictures using PhotosPicker
How to let users select a color with ColorPicker | SwiftUI by Example

How to let users select a color with ColorPicker
How to let the user select multiple dates | SwiftUI by Example

How to let the user select multiple dates
How to let users find and replace text | SwiftUI by Example

How to let users find and replace text
How to let users import videos using PhotosPicker | SwiftUI by Example

How to let users import videos using PhotosPicker

이찬희 (MarkiiimarK)
Never Stop Learning.