【发布时间】:2020-12-15 15:22:45
【问题描述】:
我有一个非常简单的想法,虽然在 SwiftUI 中这似乎几乎是不可能的。
我希望用户能够在 SwiftUI 文本字段中输入数字并将这些输入的数字显示为“hh:mm”。因此,例如用户输入 3230,应用程序应显示为 32:30,这将是面包食谱中某个步骤的运行时间。
不知何故,我无法弄清楚如何使用户体验流畅。我希望用户立即看到结果。我需要用户能够输入数字并立即希望根据输入的数字更新 UI。我目前只用了几分钟就实现了它,它工作正常。有几个小时和分钟,我似乎无法让它工作。
有人有想法吗?也许自定义 NSNumberFormatter 是一种选择?
我面临的障碍是:
- 输入数字时格式化
- 进入时更新 UI
- 保持用户体验直观和简单
我目前使用的代码是:
TextEditor(text: Binding(get: {
if step.stepDuration == 0 { return "" }
else { return String(step.stepDuration) }
}, set: { (newValue) in
guard let recipe = step.parent else { return }
recipe.objectWillChange.send()
step.stepDuration = Int64(newValue) ?? 0
}))
.frame(maxWidth: 60)
.multilineTextAlignment(.trailing)
.keyboardType(.numberPad)
这就是我想要的结果(输入时具有流畅的用户体验)。
我希望有人可以帮助我解决这个问题,我在这里失去了理智。 :O
【问题讨论】:
-
为什么不使用
DatePicker和displayedComponents: .hourAndMinute?您尝试实现的 UI 只会使事情变得过于复杂。已经有一个用于输入时间的内置 UI 组件,因此通过重用它,您可以获得与 iOS 系统本身一致的 UX 体验。 -
日期时间选择器的问题在于它被限制为 24 小时。因此,无法输入像示例这样需要 32 小时的步骤。还是我错过了什么?
标签: swift swiftui numberformatter