在SwiftUI中,每当我在TabView中有一个TextField时,当我使用蓝牙条形码扫描仪时,Textfield永远不会从扫描仪中获得正确的值,它总是跳过数字。有时它会跳过50%的条形码,有时只是1或2个数字。这种情况只发生在TextField在Tabview中时。
老实说,我从来没有想过我会被这样的事情卡住,也许我错过了一些非常简单的东西?
下面是一个测试代码:
import SwiftUI
struct Testview: View {
@State private var searchProductText = ""
@FocusState var productFieldIsFocused: Bool
var body: some View {
TabView{
HStack {
TextField("", text: $searchProductText)
.focused($productFieldIsFocused)
.opacity(0)
.onSubmit {
print(searchProductText)
searchProductText = ""
productFieldIsFocused = true
}
}.onAppear{
productFieldIsFocused = true
}
}
}
}
struct Testview_Previews: PreviewProvider {
static var previews: some View {
Testview()
}
}
1条答案
按热度按时间xe55xuns1#
我不知道这是否是SwiftUI的预期行为,但当您在此结构中使用
@State
变量时,TextField
将被重绘。由于扫描仪可能会非常快地发送输入,因此TextField
可能会错过一些字符。如果你真的需要
HStack
,你可以尝试将状态变量移到ObservableObject
。我发现了这个问题,每当我键入一个字符时,我的光标总是跳到
TextField
的末尾。这是我解决这个问题的方法,它应该对你的情况也有帮助: