如何为 Swift UI 添加字符的最大长度



嗨,我正在创建一个待办事项应用程序,当用户在 UIText 字段中输入一些字符时遇到问题我记得 SWIFT 5 中有一种方法可以放置最大长度,但我在 SWIFT UI 中找不到 有人可以给我发送链接或逐步指导我 如何将 SWIFT UI 项目中的最大 LENGH 添加到文本字段!谢谢

我试图在任何地方找到它,但我不能

struct NewTaskView: View { var taskStore: TaskStore

@Environment(.presentationMode) var presentationMode

@State var text = ""
@State var priority: Task.Priority = .Низкий

var body: some View {
Form {
TextField("Название задания", text: $text)

VStack {
Text("Приоритет")
.multilineTextAlignment(.center)
Picker("Priority", selection: $priority.caseIndex) {
ForEach(Task.Priority.allCases.indices) { priorityIndex in
Text(
Task.Priority.allCases[priorityIndex].rawValue
.capitalized
)
.tag(priorityIndex)
}
}
.pickerStyle( SegmentedPickerStyle() )
}

我想将最大长度放在一个文本字段,其中写成文本字段("Название задания",文本:$text(

这似乎可以通过 Combine 来实现,方法是在文本周围创建一个包装器并打开一个 2 向订阅,文本订阅 TextField 和 TextField 订阅 ObservableObject。我会说它的工作方式从反应式的角度来看是相当合乎逻辑的,但希望找到一个不需要创建另一个对象的更干净的解决方案。

import SwiftUI
import Combine
class TextBindingManager: ObservableObject {
@Published var text = "" {
didSet {
if text.count > characterLimit && oldValue.count <= characterLimit {
text = oldValue
}
}
}
let characterLimit = 5
}
struct ContentView: View {
@ObservedObject var textBindingManager = TextBindingManager()
var body: some View {
TextField("Placeholder", text: $textBindingManager.text)
}
}

我读了这篇文章。 请点击这里

这是我的全部代码。我不使用EnvironmentObject.

struct ContentView: View {
@ObservedObject private var restrictInput = RestrictInput(5)
var body: some View {
Form {
TextField("input text", text: $restrictInput.text)
}
}
class RestrictInput: ObservableObject {
@Published var text = ""
private var canc: AnyCancellable!
init (_ maxLength: Int) {
canc = $text
.debounce(for: 0.5, scheduler: DispatchQueue.main)
.map { String($0.prefix(maxLength)) }
.assign(to: .text, on: self)
}
deinit {
canc.cancel()
}
}

最新更新