SwiftUI:检测 iOS 中的删除键按下

问题描述 投票:0回答:1

我正在尝试创建一个文本字段,它可以对用户按下 iOS 中小键盘上的删除按钮做出反应。

.onKeyPress(_ key:action:)
可以工作,但仅适用于硬件键盘和macOS(据我所知)。

使用

.onChange(of:)
并检查 TextField 中的值可以工作,但不是我想要的方式。我想在 文本字段中没有字符并且用户按下删除 时做出反应(据我所知,无法使用
.onChange(of:)
完成)。

您将如何实施这个?

ios swift swiftui user-input textfield
1个回答
0
投票

这是我想出的最好的代码,它运行得很好,但是文本非常小并且它使用 UIKit。我你不喜欢它。您必须坚持文本比较逻辑。

import SwiftUI
import UIKit

struct ContentView: View {
@State private var text = ""

var body: some View {
    MyTextView(text: $text)
        .padding()
}
}

struct MyTextView: UIViewRepresentable {
@Binding var text: String

class Coordinator: NSObject, UITextViewDelegate {
    var parent: MyTextView
    
    init(parent: MyTextView) {
        self.parent = parent
    }
    
    func textViewDidChange(_ textView: UITextView) {
        parent.text = textView.text
    }
    
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if text.isEmpty && textView.text.isEmpty {
            print("Delete key pressed")
        }
        return true
    }
}

func makeCoordinator() -> Coordinator {
    Coordinator(parent: self)
}

func makeUIView(context: Context) -> UITextView {
    let textView = UITextView()
    textView.delegate = context.coordinator
    return textView
}

func updateUIView(_ uiView: UITextView, context: Context) {
    uiView.text = text
}
}
© www.soinside.com 2019 - 2024. All rights reserved.