我们可以在SwiftUI中禁用Textfield的复制/粘贴选项吗?

时间:2020-02-10 10:33:58

标签: ios swiftui

我想在SwiftUI中从我的文本字段禁用复制/粘贴选项。如何实现?

1 个答案:

答案 0 :(得分:0)

使用UIViewRepresentable类使包装器类像这样。

import SwiftUI

struct CustomeTextField: View {

    @State var textStr = ""


    var body: some View {
        VStack(spacing: 10) {
            Text("This is textfield:")
                .font(.body)
                .foregroundColor(.gray)

            TextFieldWrapperView(text: self.$textStr)
                .background(Color.gray)
                .frame(width: 200, height: 50)
        }
        .frame(height: 40)
    }
}


struct TextFieldWrapperView: UIViewRepresentable {

    @Binding var text: String

    func makeCoordinator() -> TFCoordinator {
        TFCoordinator(self)
    }
}

extension TextFieldWrapperView {


    func makeUIView(context: UIViewRepresentableContext<TextFieldWrapperView>) -> UITextField {
        let textField = UITextField()
        textField.delegate = context.coordinator
        return textField
    }


    func updateUIView(_ uiView: UITextField, context: Context) {

    }
}

class TFCoordinator: NSObject, UITextFieldDelegate {
    var parent: TextFieldWrapperView

    init(_ textField: TextFieldWrapperView) {
        self.parent = textField
    }

    func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
        if action == #selector(UIResponderStandardEditActions.paste(_:)) {
            return false
        }
        return canPerformAction(action: action, withSender: sender)
    }
}