gpt4 book ai didi

ios - SwiftUI - 防止用户在文本编辑器中添加新行 (\n)

转载 作者:行者123 更新时间:2023-12-04 12:35:58 32 4
gpt4 key购买 nike

我有一个 文本编辑器 我不让用户添加 换行 (\n) 在里面。也就是说,当用户输入 ,我关掉了键盘。我已使用以下代码关闭 keybaord 并阻止用户添加新行。
键盘在 上被关闭输入 ,但它不会阻止用户添加新行。当您输入 .

extension View {
func dismissKeyboard(){
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow?.endEditing(true)
}
}


struct Editor: View {

@Binding var text: String

var onEditingEnded: () -> ()

var body: some View {
ZStack(alignment: .leading) {
TextEditor(text: $text)
.onChange(of: text) { value in
if value.last == "\n" {
self.dismissKeyboard()
self.onEditingEnded()
}
}
}
.padding(8)
.font(.body)
}
}

如何防止用户添加新行?

最佳答案

您可以使用 UITextView其中有一个 shouldChangeTextIn range委托(delegate)函数...
或者,虽然不是我所说的理想,但这可能对你有用:

TextEditor(text: $text)

.onChange(of: text) { value in
if value.last == "\n" {
text = String(value.dropLast())
self.dismissKeyboard()
self.onEditingEnded()
}
}
请注意,您只检查字符串中的最后一个字符,因此这不会处理用户在现有文本中间添加换行符的情况。
所以,你可以尝试:
TextEditor(text: $text)

.onChange(of: text) { value in
if value.contains("\n") {
text = value.replacingOccurrences(of: "\n", with: "")
self.dismissKeyboard()
self.onEditingEnded()
}
}

关于ios - SwiftUI - 防止用户在文本编辑器中添加新行 (\n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64826368/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com