Swiftui Tabview导致Textfield出现问题

wqsoz72f  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(88)

在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()
    }
}
xe55xuns

xe55xuns1#

我不知道这是否是SwiftUI的预期行为,但当您在此结构中使用@State变量时,TextField将被重绘。由于扫描仪可能会非常快地发送输入,因此TextField可能会错过一些字符。
如果你真的需要HStack,你可以尝试将状态变量移到ObservableObject
我发现了这个问题,每当我键入一个字符时,我的光标总是跳到TextField的末尾。这是我解决这个问题的方法,它应该对你的情况也有帮助:

class TextViewModel: ObservableObject {
    @Published var txt = ""
}

struct ContentView: View {
    
    @ObservedObject private var viewModel = TextViewModel()
    
    var body: some View {
        TabView {
            VStack {
                TextField("Text", text: $viewModel.txt)
            }
            .padding()
            .tabItem {
                Text("My Tab")
            }
        }
    }
}

相关问题