SwiftUI - 为什么在 macOS 上更改选项卡时 TabView 及其内容有时不刷新?
SwiftUI - Why is TabView and its contents sometimes not refreshing when I change tabs on macOS?
我正在尝试使用 SwiftUI 在 macOS 上制作选项卡式应用程序,但我遇到了 TabView
.
的奇怪问题
当我有两个带有 TextField
的选项卡并将它们的文本状态保存到它们各自的私有变量时,会发生一些奇怪的事情:当我从 tab A 切换到tab B 在 tab A 的 TextField
中输入文本后,标签指示器显示我仍在 选项卡 A,但内容显示 选项卡 B 的内容。当我再次点击tab B的按钮时,它仍然会显示tab B的内容。此外,当我之后按下 tab A 的按钮时,它将显示 tab 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)
}
}
}
这是发生的问题的屏幕截图:
这绝对是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
}
}
}
}
此错误似乎仅在用户在 TextField 具有焦点的情况下更改选项卡时才会出现。
如果您对代码进行上述更改,它将按预期工作。
我正在尝试使用 SwiftUI 在 macOS 上制作选项卡式应用程序,但我遇到了 TabView
.
当我有两个带有 TextField
的选项卡并将它们的文本状态保存到它们各自的私有变量时,会发生一些奇怪的事情:当我从 tab A 切换到tab B 在 tab A 的 TextField
中输入文本后,标签指示器显示我仍在 选项卡 A,但内容显示 选项卡 B 的内容。当我再次点击tab B的按钮时,它仍然会显示tab B的内容。此外,当我之后按下 tab A 的按钮时,它将显示 tab 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)
}
}
}
这是发生的问题的屏幕截图:
这绝对是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
}
}
}
}
此错误似乎仅在用户在 TextField 具有焦点的情况下更改选项卡时才会出现。
如果您对代码进行上述更改,它将按预期工作。