chu*_*mcl 10 ios tabview swift swiftui
我正在尝试使用 SwiftUI 在 macOS 上制作一个选项卡式应用程序,但我在TabView.
当我有两个选项卡与TextField每个S和挽救他们的文本状态,各自的私有变量,一个奇怪的现象发生了:当我从切换标签一到片乙文本输入到后项卡A的TextField,标签指标显示,我还是上选项卡 A,但内容显示选项卡 B的内容。当我再次单击选项卡 B的按钮时,它仍会显示选项卡 B的内容。此外,当我之后按下选项卡 A的按钮时,它会显示选项卡 A的内容,但选项卡的指示器仍然显示我在选项卡 B 上。
我可能做错了什么?
这是一个说明我的问题的示例:
import SwiftUI
struct ContentView: View {
var body: some View {
TabView
{
TabAView()
.tabItem({Text("Tab A")})
TabBView()
.tabItem({Text("Tab B")})
}
}
}
struct TabAView: View {
@State private var text = ""
var body: some View {
VStack{
Text("Tab A")
TextField("Enter", text: $text)
}
}
}
struct TabBView : View {
@State private var text = ""
var body: some View {
VStack {
Text("Tab B")
TextField("Enter", text: $text)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这绝对是 SwiftUI 实现 TabView 时的一个 bug。但是您可以通过绑定到 TabView 选择并手动设置当前选项卡来轻松解决该问题,如下所示:
struct ContentView: View {
@State private var currentTab = 0
var body: some View {
TabView(selection: $currentTab)
{
TabAView()
.tabItem({Text("Tab A")})
.tag(0)
.onAppear() {
self.currentTab = 0
}
TabBView()
.tabItem({Text("Tab B")})
.tag(1)
.onAppear() {
self.currentTab = 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此错误似乎仅在用户在 TextField 具有焦点时更改选项卡时才会显现出来。
如果您对代码进行上述更改,它将按预期工作。