gpt4 book ai didi

swift - 使用 SwiftUI 将 TextField 限制为 x 个字符

转载 作者:行者123 更新时间:2023-11-28 13:24:08 26 4
gpt4 key购买 nike

使用 iOS13.2、Swift-5.1.2、Xcode-11.2,我尝试以下操作:

我想使用 TextField。用户只能在 TextField 中输入 x 个字符。

我的代码如下所示:

import Combine
import SwiftUI

class Entry: ObservableObject {

@Published var entry = "" {
didSet {
entry = String(entry.prefix(6)) // trying to limit to 6 characters
}
}
}

并且在上面的代码中,已经有了异常行。

我可以看到 didSet{...} 是错误的(因为我们最终陷入无限循环设置/didSetting 一次又一次)...

将 TextField 限制为 x 个字符的更好方法是什么?

下面是剩余的代码:

struct NumberView: View {
var body: some View {

Group {
HStack {
Spacer()
NumberIcon(number: 1)
NumberIcon(number: 2)
NumberIcon(number: 3)
NumberIcon(number: 4)
NumberIcon(number: 5)
NumberIcon(number: 6)
Spacer()
}
}
}
}
struct NumberIcon: View {
@ObservedObject private var entry = Entry()
var number: Int = 0
var body: some View {
TextField(" ", text: $entry.entry, onEditingChanged: { editing in
print(editing)
print(self.$entry)
})
.padding()
.foregroundColor(Color.black)
.background(Color.green)
.font(.largeTitle)
.lineLimit(1)
.cornerRadius(16.0)
.clipped()
.keyboardType(.numberPad)
}
}

struct NumberView_Previews: PreviewProvider {
static var previews: some View {
NumberView()
}
}

我知道有 UIKit 包装器可以使用旧的 shouldChangeCharactersIn 委托(delegate)方法形成 UITextFieldDelegate - 但我想纯粹使用 SwiftUI(没有 UIKit 代码)来实现字符限制。我该怎么做?

最佳答案

感谢this answer here ,我找到了解决方案:

可以重写 Entry 类:

class Entry: ObservableObject {

let characterLimit = 6 // limiting to 6 characters
@Published var entry = "" {
didSet {
if entry.count > characterLimit && oldValue.count <= characterLimit {
entry = oldValue
}
}
}
}

关于swift - 使用 SwiftUI 将 TextField 限制为 x 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672761/

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