Обеспечение возможности выбора текста в SwiftUI: несколько методов, объясненных примерами кода

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

Метод 1: использование TextView
Один из способов включить возможность выбора текста — использовать UITextView, завернутый в UIViewRepresentableв SwiftUI. Вот пример:

import SwiftUI
import UIKit
struct SelectableText: UIViewRepresentable {
    var text: String
    func makeUIView(context: Context) -> UITextView {
        let textView = UITextView()
        textView.isEditable = false
        textView.isSelectable = true
        textView.dataDetectorTypes = .all
        return textView
    }
    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.text = text
    }
}
struct ContentView: View {
    var body: some View {
        SelectableText(text: "Selectable text example")
    }
}

Метод 2: использование кнопки с действием
Другой подход — использовать Buttonс действием, которое копирует текст в буфер обмена при нажатии. Вот пример:

import SwiftUI
struct ContentView: View {
    @State private var isCopied = false
    var textToCopy = "Selectable text example"
    var body: some View {
        Button(action: {
            UIPasteboard.general.string = textToCopy
            isCopied = true
        }) {
            Text(textToCopy)
                .foregroundColor(isCopied ? .green : .blue)
        }
    }
}

Метод 3: использование LongPressGesture
В этом методе мы можем использовать представление Textс LongPressGestureдля запуска действия, например копирования текста. Вот пример:

import SwiftUI
struct ContentView: View {
    @State private var isCopied = false
    var textToCopy = "Selectable text example"
    var body: some View {
        Text(textToCopy)
            .foregroundColor(isCopied ? .green : .blue)
            .gesture(
                LongPressGesture()
                    .onEnded { _ in
                        UIPasteboard.general.string = textToCopy
                        isCopied = true
                    }
            )
    }
}

В этой статье мы рассмотрели три различных способа сделать текст доступным для выбора в SwiftUI. Используя UITextView, заключенный в UIViewRepresentable, Buttonс действием или представление Textс LongPressGesture, вы можете обеспечить возможность выбора текста в своем приложении SwiftUI. Выберите метод, который соответствует вашим потребностям и повышает удобство использования.